Есть ли элегантный способ найти ближайший день недели для заданной даты с помощью JodaTime? Сначала я подумал, что это будет setCopy ()
, но он устанавливает день в определенный день той же недели . Таким образом, если ld
равно 2011-11-27
, а день
- «понедельник», следующая функция возвращает 2011-11-21
, а не 2011-11-28
как я хочу.
// Note that "day" can be _any_ day of the week, not just weekdays.
LocalDate getNearestDayOfWeek(LocalDate ld, String day) {
return ld.dayOfWeek().setCopy(day);
}
Желаемый результат для различных входных данных:
2011-12-04, Monday => 2011-12-05
2011-12-04, Tuesday => 2011-12-06
2011-12-04, Wednesday => 2011-12-07
2011-12-04, Thursday => 2011-12-01
2011-12-04, Friday => 2011-12-02
2011-12-04, Saturday => 2011-12-03
2011-12-04, Sunday => 2011-12-04
2011-12-05, Monday => 2011-12-05
2011-12-05, Tuesday => 2011-12-06
2011-12-05, Wednesday => 2011-12-07
2011-12-05, Thursday => 2011-12-08
2011-12-05, Friday => 2011-12-02
2011-12-05, Saturday => 2011-12-03
2011-12-05, Sunday => 2011-12-04
Ниже я придумал обходной путь, который работает для конкретных ограничений в моей текущей ситуации, но мне бы хотелось получить помощь в поиске полностью универсального решения, которое работает всегда.
LocalDate getNearestDayOfWeek(LocalDate ld, String day) {
LocalDate target = ld.dayOfWeek().setCopy(day);
if (ld.getDayOfWeek() > DateTimeConstants.SATURDAY) {
target = target.plusWeeks(1);
}
return target;
}