Документы Java верны в том, что IANA, IATA и Microsoft являются источниками информации о часовых поясах.Однако, хотя может быть возможно создание ZoneRulesProvider
для каждого из них, насколько я знаю, я не верю, что существуют какие-либо стандартные реализации ZoneRulesProvider
для чего-либо, кроме данных IANA.Можно было бы написать, если бы вы были так склонны.
Хотя есть разумное решение.Как и другой вопрос, на который вы ссылались, сопоставления часовых поясов между IANA и Microsoft поддерживаются в файле windowsZones.xml в Unicode CLDR .Эти данные можно использовать для перевода идентификатора часового пояса Microsoft, возвращенного внешним API, в имя часового пояса IANA.Вы можете использовать его напрямую или использовать библиотеку, которая предоставляет вам эту функцию.Хороший выбор библиотеки: Международные компоненты для Unicode (ICU) через реализацию ICU4J , найденную на странице проекта .Это getIDForWindowsID
метод ( документы здесь ) использует данные CLDR для обеспечения перевода.
В качестве альтернативы, если вы имеете какое-либо влияние на внешний API, есть вероятность, что он возвращает часовой пояс MicrosoftИдентификаторы, что он построен с использованием .NET.Если это так, вы можете рекомендовать разработчикам этого API возвращать стандартный идентификатор часового пояса IANA в своих результатах API (возможно, в качестве дополнительного поля, если они заинтересованы в совместимости).Моя библиотека с открытым исходным кодом TimeZoneConverter подходит для этой цели и также использует те же данные CLDR.
Обратите внимание, что идентификаторы часовых поясов IANA уже существуют в нескольких областях в Microsoft, включая .NETЯдро на Linux / MacOS, .NET Framework через библиотеки, такие как Noda Time и другие, приложения универсальной платформы Windows (UWP) и некоторые другие.«Часовые пояса Microsoft» - это исторический артефакт, восходящий к самым ранним дням Windows NT.Разработчикам, как правило, следует рекомендовать использовать идентификаторы часовых поясов IANA, а не часовые пояса Microsoft, особенно в API внешних интерфейсов, для обеспечения взаимодействия с системами, отличными от Windows.Более подробную информацию о часовых поясах Microsoft можно найти в тэге часовых поясов wiki .
Кроме того, имейте в виду, что странице, на которую вы ссылались со списком часовых поясов Microsoft, почти десять лет, ивокруг для наследственных целей.Столбцы индекса использовались только на платформах Windows CE, и некоторые из этих часовых поясов больше не существуют.Мы больше не публикуем список этих часовых поясов в виде статической веб-страницы, поскольку данные изменяются слишком часто.Вы всегда можете получить список с любого компьютера Windows с помощью команды TZUTIL /L
, или позвонив по номеру TimeZoneInfo.GetSystemTimeZones()
в .NET или Powershell, или изучив реестр по адресу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
.
Полное раскрытие: я помогаюподдерживать часовые пояса в Microsoft, а также несколько библиотек часовых поясов с открытым исходным кодом для .NET.