Как найти ближайший день недели для произвольной даты?

Есть ли элегантный способ найти ближайший день недели для заданной даты с помощью 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;
    }
7
задан Stig Brautaset 5 December 2011 в 14:58
поделиться