Переход на следующую или предыдущую неделю

88
16 февраля 2022, 23:00

Есть активити с двумя кнопками "<<" и ">>". Также есть Calendar calendar = Calendar.getInstance();. Как сделать так, чтобы при нажатии на кнопку ">>" в переменные m1 и m2 записывались timestamp понедельника и воскресенья следующей недели, а когда нажали на кнопку "<<" записались timestamp понедельника и воскресенья предыдущей недели?

Answer 1

Почему-то ваш код, и код, который по вашей ссылке не совсем то что нужно выдавал. Текущую неделю например выдавал как с 12 по 18 января. Нашел другое решение.

Текущая неделя

private void setWeekCurrent() {
    calendar.setTimeZone(TimeZone.getDefault());
    calendar.setFirstDayOfWeek(Calendar.MONDAY);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    while(calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY)
    {
        calendar.add(Calendar.DATE,-1);
    }
    txtPeriod.setText(calendar.getTime() + " ");
    mills1 = calendar.getTimeInMillis()/1000L;
    calendar.add(Calendar.DATE, 6);
    txtPeriod.append(" / " + calendar.getTime() + " ");
    mills2 = calendar.getTimeInMillis()/1000L;
}

Следующая неделя

private void setWeekNext() {
    calendar.setTimeZone(TimeZone.getDefault());
    calendar.add(Calendar.WEEK_OF_YEAR, 1);
    calendar.setFirstDayOfWeek(Calendar.MONDAY);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    while(calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY)
    {
        calendar.add(Calendar.DATE,-1);
    }
    txtPeriod.setText(calendar.getTime() + " ");
    mills1 = calendar.getTimeInMillis()/1000L;
    calendar.add(Calendar.DATE, 6);
    txtPeriod.append(" / " + calendar.getTime() + " ");
    mills2 = calendar.getTimeInMillis()/1000L;
}

Предыдущая неделя

private void setWeekPrev() {
    calendar.setTimeZone(TimeZone.getDefault());
    calendar.add(Calendar.WEEK_OF_YEAR, -1);
    calendar.setFirstDayOfWeek(Calendar.MONDAY);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    while(calendar.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY)
    {
        calendar.add(Calendar.DATE,-1);
    }
    txtPeriod.setText(calendar.getTime() + " ");
    mills1 = calendar.getTimeInMillis()/1000L;
    calendar.add(Calendar.DATE, 6);
    txtPeriod.append(" / " + calendar.getTime() + " ");
    mills2 = calendar.getTimeInMillis()/1000L;
}
Answer 2

Можно попробовать так для текущей недели:

SimpleDateFormat displayDate = new SimpleDateFormat("dd-MMM-yyyyy"));
final Calendar calenderThisWeek = Calendar.getInstance();
calenderThisWeek.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
String strWek = displayDate.format(calenderThisWeek.getTime()); // dd-mmm-yyyy
calenderThisWeek.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);  
String endWek = displayDate.format(calenderThisWeek.getTime()); // dd-mmm-yyyy

так для предыдущей:

final Calendar calenderpreviousWeek = Calendar.getInstance();
calenderpreviousWeek.add(Calendar.DAY_OF_WEEK, -1);
calenderpreviousWeek.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
String strWek = displayDate.format(calenderThisWeek.getTime()); // dd-mmm-yyyy
calenderpreviousWeek.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);          
String endWek = displayDate.format(calenderpreviousWeek.getTime()); // dd-mmm-yyyy

и для следующей:

final Calendar calenderNextWeek = Calendar.getInstance();
calenderNextWeek.add(Calendar.DAY_OF_WEEK, +1);
calenderNextWeek.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
String strWek = displayDate.format(calenderNextWeek.getTime()); // dd-mmm-yyyy
calenderNextWeek.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);  
String endWek = displayDate.format(calenderNextWeek.getTime()); // dd-mmm-yyyy  

Вот статья где более-менее нормально расписано как решать данную проблему и вопрос_1 / вопрос_2 на enSO

READ ALSO
В чем ошибка такой записи на PHP?

В чем ошибка такой записи на PHP?

При таком условии выводит "GOOD"Не понятно почему

82
Не могу спрятать порт Apache

Не могу спрятать порт Apache

Столкнулся с такой проблемой, мне нужно чтобы сайт открывался по ip на веб-сервере Apache по порту 8080Всё работает, но

99
Проблема с формой смены пароля

Проблема с формой смены пароля

всем приветвозникла небольшая проблема, подскажите, пожалуйста, как исправить

131