Я не думаю, что физически возможно создать ZonedDateTime
, который находится в переходе с пропуском, потому что локальные даты, когда пропускается переход с пропуском, технически "не существуют", а ZonedDateTime
вполне строго по этому поводу. В зависимости от вашего метода он либо сгенерирует исключение, либо подстроится под существующее время.
Эту проверку следует выполнять с LocalDateTime
с, а не ZonedDateTime
с.
ZoneRules
имеет этот очень удобный метод, называемый getTransition
, который принимает LocalDateTime
и дает вам ZoneOffsetTransition
, который представляет переход с пропуском / перекрытием, или null
, если время этой даты не имеет переход. Пример:
System.out.println(ZoneId.of("Africa/Accra").getRules()
.getTransition(LocalDateTime.of(1920, 9, 1, 00, 10)));
Вывод:
Transition[Gap at 1920-09-01T00:00Z to +00:20]
Затем вы можете получить всю необходимую информацию (начало, конец, смещение до, смещение после, разрыв / наложение и т. Д. c) от объекта ZoneOffsetTransition
.