Проблема с часовым поясом Java, когда LocalDate не показывает правильную дату

В настоящее время я живу в Европе/Лондоне.

Я пытаюсь получить текущий день в Самоа, то есть 27 июля, с помощью следующего кода:

      LocalDate localDate = LocalDate.now(ZoneId.of("Pacific/Samoa"));

Однако по какой-то причине это выводится так:

      2023-07-26

Сейчас 16:47 26 июля в Лондоне и 4:47 27 июля в Самоа.

Я не понимаю, почему я получаю 26 в качестве вывода, если я использую ZoneId Самоа.

2 ответа

Проблема в том, что Тихий океан/Самоа больше не является часовым поясом Самоа, а только часовым поясом Американского Самоа. А в Американском Самоа сейчас 05:07 26 июля (18:07 26 июля в Европе/Амстердаме).

Несколько лет назад (в 2011 году) Самоа перешло международную линию дат, в результате чего появился новый часовой пояс, и вам необходимо использовать часовой пояс Pacific/Apia:

      jshell> LocalDate.now(ZoneId.of("Pacific/Apia"))
$3 ==> 2023-07-27
jshell> LocalDateTime.now(ZoneId.of("Pacific/Apia"))
$4 ==> 2023-07-27T05:07:08.188250

Согласно документации, вы захотите использоватьZoneIdизPacific/Pago_Pagoчтобы получить самоанское время.

Изменить: как Джон исправил ниже; документ, на который я дал ссылку, старый иPacific/Samoaявляется приемлемым идентификатором. Оставлю это здесь в качестве ссылки.

Другие вопросы по тегам