Получить следующую и предыдущую неделю в календаре

166
08 января 2022, 18:10

Есть активити с двумя кнопками Prev и Next и TextView.

По нажатию на Prev в TextView нужно выводить предыдущую неделю (понедельник - воскресенье даты). Например 09.12.2019 - 15.12.2019, а по нажатию на Next наоборот следующую неделю 23.12.2019 - 29.12.2019. Как это реализовать?

Вот весь код:

public class AboutActivity extends AppCompatActivity {
    private Calendar calendar = Calendar.getInstance();
    private Button btnPrev;
    private Button btnNext;
    private TextView txtPeriod;
    private TextView txtMills;
    private boolean isCurrentDate = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about);
        btnPrev = findViewById(R.id.btnPrev);
        btnNext = findViewById(R.id.btnNext);
        txtPeriod = findViewById(R.id.txtPeriod);
        txtMills = findViewById(R.id.txtMills);
    }
    @Override
    protected void onResume() {
        super.onResume();
        setWeekNext();
        btnNext.setOnClickListener(v -> {
            setWeekNext();
        });
        btnPrev.setOnClickListener(v -> {
            setWeekPrev();
        });
    }
    //Вывод предыдущей недели
    private void setWeekPrev() {
        if (!isCurrentDate) {
            calendar.setTime(new Date());
            isCurrentDate = true;
        }
        calendar.setTimeZone(TimeZone.getDefault());
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //Устанавливаем понедельник первым днем недели
        calendar.set(Calendar.HOUR_OF_DAY, 0); //Устанавливаем часы в ноль
        calendar.set(Calendar.MINUTE, 0); //минуты в ноль
        calendar.set(Calendar.SECOND, 0); //секкунды в ноль
        calendar.set(Calendar.MILLISECOND, 0); //миллисекунды в ноль
        calendar.add(Calendar.WEEK_OF_YEAR, -1); //Предыдущая неделя
        long mills1 = calendar.getTimeInMillis()/1000L;
        txtPeriod.setText(calendar.getTime() + " ");
        txtMills.setText(mills1 + " / ");
        calendar.add(Calendar.DAY_OF_WEEK, 6);
        txtPeriod.append(calendar.getTime() + "");
        long mills2 = calendar.getTimeInMillis()/1000L;
        calendar.add(Calendar.DAY_OF_WEEK, -6);
        txtMills.append(mills2 + "");
    }
    //Вывод следующей недели
    private void setWeekNext() {
        calendar.setTimeZone(TimeZone.getDefault());
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //Устанавливаем понедельник первым днем недели
        calendar.set(Calendar.HOUR_OF_DAY, 0); //Устанавливаем часы в ноль
        calendar.set(Calendar.MINUTE, 0); //минуты в ноль
        calendar.set(Calendar.SECOND, 0); //секкунды в ноль
        calendar.set(Calendar.MILLISECOND, 0); //миллисекунды в ноль
        long mills1 = calendar.getTimeInMillis()/1000L;
        txtPeriod.setText(calendar.getTime() + " ");
        txtMills.setText(mills1 + " / ");
        calendar.add(Calendar.WEEK_OF_YEAR, 1); //Следующая неделя
        calendar.add(Calendar.DAY_OF_WEEK, -1); //Предыдущий день. (т.е. воскресенье)
        txtPeriod.append(calendar.getTime() + "");
        long mills2 = calendar.getTimeInMillis()/1000L;
        txtMills.append(mills2 + "");
    }
}

В итоге я бы хотел получить следующее:

  1. При нажатии на btnNext получаем понедельник и воскресенье следующей недели
  2. При нажатии на btnPrev получаем понедельник и воскресенье предыдущей недели

и так по нарастающей или по убывающей смотря какую кнопку нажали.

В mills1 и mills2 соответственно записываются timestamp понедельника и воскресенья недели.

Answer 1

Второй параметр в методе add() может принимать отрицательные значения.

calendar.add(Calendar.WEEK_OF_YEAR, -1); // переход на предыдущую неделю
READ ALSO
Не работает javascript в webview на андроид 5 і 6!

Не работает javascript в webview на андроид 5 і 6!

На андроид 5 і 6 не работает javascript:

113
Парсер не выводит русские буквы в TextView

Парсер не выводит русские буквы в TextView

Не могу вывести русские буквы в TextView через парсерИспользую такую комбинацию:

144
Как правильно распарсить строку?

Как правильно распарсить строку?

Пытаюсь распарсить формулу на составные частиЕсть метод:

204