javdoc для LocalDate#toDateMidnight
читается следующим образом:
Начиная с версии 1.5, рекомендуется избегать DateMidnight и использовать toDateTimeAtStartOfDay() вместо этого из-за подробного исключения ниже.
Этот метод генерирует исключение, если переключатели часовых поясов по умолчанию на летнее время в полночь, и это LocalDate представляет эта дата переключения. Проблема в том, что нет такого времени, как полночь в требуемую дату, и как таковое исключение.
Тот факт, что полночь не существует в определенных часовых поясах, кажется достаточной для того, чтобы избежать использования DateMidnight
целиком (при условии, что ваш код не использует фиксированный часовой пояс, который, как известно, не имеет такой ситуации летнего времени, и ему никогда не понадобится использовать различные часовые пояса в будущем).
Однако DateMidnight
не устарел, и в javadoc для класса DateMidnight
нет аналогичной рекомендации или предупреждения. Более того, конструктор DateMidnight
счастливо принимает мгновенный и часовой пояс таким образом, что полночь не существует в данный день, а не бросает IllegalArgumentException
как LocalDate#toDateMidnight
. Результирующий DateMidnight
ведет себя как a DateTime
со временем в начале дня.
Когда полночь не существует в данный день, почему LocalDate#toDateMidnight
выдает исключение, а конструктор DateMidnight
не работает? Каков рекомендуемый прецедент для DateMidnight
, если таковой имеется?