Проблема с часовым поясом 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
является приемлемым идентификатором. Оставлю это здесь в качестве ссылки.