Дата, время, дневной световой вопрос в java 8 для часового пояса Австралия / Мельбурн - PullRequest
3 голосов
/ 27 марта 2020

Я получаю разные результаты для начала и конца перехода на летнее время.

ZoneId zone = ZoneId.of("Australia/Melbourne");
System.out.println(ZonedDateTime.of(2019, 04, 07, 3, 0, 0, 0, zone)); // statement-1
System.out.println(ZonedDateTime.of(2019, 10, 06, 2, 0, 0, 0, zone)); // statement-2

Для первой половины экономии дневного света на 2019 год я получаю результат как (2019-04-07T03: 00 ** + ** 10:00 [Австралия / Мельбурн]). Java уменьшает 1 час до значения смещения. Но для второй половины дневного света (выписка-2 => 2019-10-06T 03: 00 + 11: 00 [Австралия / Мельбурн]) java прибавляет 1 час ко времени и + 1 к значению смещения.

В моем понимании java должно увеличиваться на 1 час во времени и +1 на значение смещения (конец летнего времени), а при старте летнего времени java должно уменьшаться на 1 час от времени и 1 от значения смещения ,

Пожалуйста, помогите мне получить разъяснения относительно различий. Это проблема java 8 или мое понимание неверно?

1 Ответ

6 голосов
/ 27 марта 2020

Глядя на переходы DST для Австралии / Мельбурна , часы никогда не были 02:00 2019-10-06 из-за изменения DST. Вот как работает летнее время: после 01: 59: 59.999999 часы переходят на 03: 00: 00.000000.

Это задокументировано в ZonedDateTime.of javado c:

В случае разрыва, когда часы прыгают вперед, действительного смещения нет. Вместо этого местная дата-время корректируется, чтобы быть позже на длину промежутка. Для типичного перехода на летнее время в течение одного часа местная дата и время будут перенесены на один час позже в смещение, обычно соответствующее «лету».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...