Разница между now
и now + 2 months
не равна 2 в этом примере, несмотря на то, что я думал LocalDate
математика работала следующим образом:
import java.time.LocalDate;
import static java.time.temporal.ChronoUnit.MONTHS;
public class MyClass {
public static void main(String... args) {
LocalDate now = LocalDate.of(2020, 7, 31);
LocalDate later = now.plusMonths(2);
System.out.println("Now: " + now);
System.out.println("Later: " + later);
System.out.println("Months between now and later: " + MONTHS.between(now, later));
}
}
Вывод:
Now: 2020-07-31
Later: 2020-09-30
Months between now and later: 1
Я узнал об этом только потому, что мне довелось запустить модульный тест, который пришелся на дату, которая нарушает ожидания ...
Проверка javado c для LocalDate.addMonths:
Этот метод добавляет указанную сумму в поле месяцев в три этапа:
Add the input months to the month-of-year field
Check if the resulting date would be invalid
Adjust the day-of-month to the last valid day if necessary
Например, 31.03.2007 плюс один месяц приведет к недопустимой дате 2007-04-31. Вместо того, чтобы возвращать недопустимый результат, выбирается последний действительный день месяца, 2007-04-30.
Это означает, что это работает как задумано. Итак, не прибегая к vintage Date / Time api ...
Каков правильный способ получить количество месяцев между двумя датами?