Некоторые часовые пояса являются псевдонимами других часовых поясов. Например, на момент написания Европа/Скопье и Европа/Загреб связаны с Европой/Белградом.
В Joda Time эти псевдонимы можно разрешить с помощью DateTimeZone.forID(id).getID(), поскольку DateTimeZone.forID() следует по этим ссылкам, чтобы вернуть канонический часовой пояс.
Можно ли сделать что-то подобное с java.time API?
Некоторые вещи, которые я пробовал:
выдаст исключение, если идентификатор не существует, но не будет разрешать ссылки: ZoneId.of("Europe/Skopje").getId() возвращает "Europe/Skopje", а не "Europe/Belgrade".
канонизирует только часовые пояса с фиксированным смещением, поэтому, как я вижу, здесь нет ничего полезного.
Все эти часовые пояса возвращаются ZoneId.getAvailableZoneIds(), и можно запросить правила каждого из них через ZoneId.getRules(), поэтому, учитывая, что правила будут одинаковыми для канонической зоны и всех связанных зон, это Можно определить, что, скажем, Европа/Белград, Европа/Скопье и Европа/Загреб эквивалентны, но невозможно определить, какой из них является каноническим. (Я также не совсем уверен, что наличие равных правил обязательно означает, что два часовых пояса обязательно связаны.)
Некоторые часовые пояса являются псевдонимами других часовых поясов. Например, на момент написания Европа/Скопье и Европа/Загреб связаны с Европой/Белградом. В Joda Time эти псевдонимы можно разрешить с помощью DateTimeZone.forID(id).getID(), поскольку DateTimeZone.forID() следует по этим ссылкам, чтобы вернуть канонический часовой пояс. Можно ли сделать что-то подобное с java.time API? Некоторые вещи, которые я пробовал: [list] [*][code]ZoneId.of(id)[/code] выдаст исключение, если идентификатор не существует, но не будет разрешать ссылки: ZoneId.of("Europe/Skopje").getId() возвращает "Europe/Skopje", а не "Europe/Belgrade".
[*][code]ZoneId.of(id).normalized()[/code] канонизирует только часовые пояса с фиксированным смещением, поэтому, как я вижу, здесь нет ничего полезного.
[*]Все эти часовые пояса возвращаются ZoneId.getAvailableZoneIds(), и можно запросить правила каждого из них через ZoneId.getRules(), поэтому, учитывая, что правила будут одинаковыми для канонической зоны и всех связанных зон, это Можно определить, что, скажем, Европа/Белград, Европа/Скопье и Европа/Загреб эквивалентны, но невозможно определить, какой из них является каноническим. (Я также не совсем уверен, что наличие равных правил обязательно означает, что два часовых пояса обязательно связаны.)