Как в Java найти даты за предыдущие 2 понедельника?

Может быть так:

for(int i=0;i<15;i++){
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_MONTH, -1);

if (cal.Calendar.DAY_OF_WEEK==1){
System.out.println(cal.cal.getTime())

Но может быть существует более простой способ? Благодарю.

3 ответа

Решение

Ты на правильном пути.

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, -7); // First week before
cal.add(Calendar.DAY_OF_YEAR, -7); // Second week before

Позвольте мне сделать эту работу только по понедельникам.

Calendar cal = Calendar.getInstance();

int weekday = cal.get(Calendar.DAY_OF_WEEK);
int days = (Calendar.SATURDAY - weekday + 2) % 7;

cal.add(Calendar.DAY_OF_YEAR, days);

cal.add(Calendar.DAY_OF_MONTH, -7);
cal.add(Calendar.DAY_OF_MONTH, -7);

Еще проще было бы установить день недели напрямую:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.add(Calendar.DATE, -7);
System.out.println(cal.getTime());

Пожалуйста, имейте в виду, что это не влияет на время. Если вы хотите 00:00, вам нужно установить соответствующие значения:

cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

java.time

Используйте TemporalAdjuster.

LocalDate today = LocalDate.now();

LocalDate previousOrSameMonday = today.with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY ) );

И вычтите неделю, чтобы получить вторую.

LocalDate secondMondayBefore = previousOrSameMonday.minusWeeks( 1 );
Другие вопросы по тегам