Найти следующее появление дня недели в JSR-310

Для объекта JSR-310, такого как LocalDate, как я могу найти дату следующей среды (или любой другой день недели?

LocalDate today = LocalDate.now();
LocalDate nextWed = ???

Ответ 1

Ответ зависит от вашего определения "в следующую среду"; -)

JSR-310 предоставляет два варианта, используя класс TemporalAdjusters.

Первый вариант next():

LocalDate input = LocalDate.now();
LocalDate nextWed = input.with(TemporalAdjusters.next(DayOfWeek.WEDNESDAY));

Второй вариант nextOrSame():

LocalDate input = LocalDate.now();
LocalDate nextWed = input.with(TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY));

Эти два варианта различаются в зависимости от того, какой день недели имеет входная дата.

Если дата ввода - 2014-01-22 (среда), то:

  • next() вернется 2014-01-29, через неделю
  • nextOrSame() вернется в 2014-01-22, то же, что и вход

Если дата ввода - 2014-01-20 (понедельник), то:

  • next() вернется 2014-01-22
  • nextOrSame() вернется 2014-01-22

т. next() всегда возвращает более позднюю дату, тогда как nextOrSame() вернет дату ввода, если она соответствует.

Обратите внимание, что оба варианта выглядят намного лучше со статическим импортом:

LocalDate nextWed1 = input.with(next(WEDNESDAY));
LocalDate nextWed2 = input.with(nextOrSame(WEDNESDAY));

TemporalAdjusters также включает в себя методы сравнения previous() и previousOrSame().