Сопоставление часового пояса joda с часовым поясом windows (например, в C#)

У меня проблемы с отображением часовых поясов JODA в Windo ws.

Я использую xml сопоставлений CLDR, и он работает для большинства переводов.

тем не менее, он не имеет значений для нескольких часовых поясов йода:

Америка / Индиана / Индианаполис, BST, Австралия / Виктория, Юниверсал, Австралия / Новый Южный Уэльс, Америка / Форт-Уэйн, Африка / Асмэра, Америка / Кентукки / Луисвилл, Азия / Кашгар, США / Тихий океан, Австралия / Запад, Австралия / Квинсленд, Австралия / Юг, США / Восток, США / Центр, США / Аризона, Австралия / Тасмания, Новая Зеландия, США / Гора, Австралия / Евкла, GMT, Япония, CAT, Etc/GMT+0, CST, PST, EST, Австралия / Канберра, Мексика / Генерал, Израиль, Канада / Восточная, И т.д. /GMT+9, Канада / Центральная, Австралия / Северная

Где я могу найти отображение между этими часовыми поясами joda и часовыми поясами Windo ws?

1 ответ

Решение

Используя чистые данные CLDR:

  • Проверьте зону в /common/bcp47/timezone.xml файл.

    Если это не первая запись в alias поле, затем используйте первую запись. Пример:

    <type name="aumel" description="Melbourne, Australia"
                       alias="Australia/Melbourne Australia/Victoria"/>
    

    Ты можешь видеть Australia/Victoria как второй пункт, так что это псевдоним Australia/Melbourne, Обратите внимание, что канонические зоны CLDR не совсем соответствуют определению TZDB канонических, поэтому используйте эти отображения CLDR, а не link записи из цдб.

  • Теперь проверьте /common/supplemental/windowsZones.xml файл. Пример:

    <mapZone other="AUS Eastern Standard Time" territory="AU"
             type="Australia/Sydney Australia/Melbourne"/>
    

    type поле содержит одну или несколько зон tzdb. other поле содержит соответствующую зону Windows.

  • Имейте в виду, что не все зоны tzdb имеют действительную соответствующую зону Windows, а некоторые не являются идеальными отображениями.

    • Пример несовершенного отображения: America/Havana => Eastern Standard Time

      • Дни перехода на летнее время совпадают, но Куба переходит в полночь вместо 2 часов ночи.
    • Пример не отображаемой зоны: Australia/Lord_Howe

      • Существует в timezone.xml, но не в windowsZones.xml.
      • В настоящее время нет записи о часовом поясе Windows для этого местоположения.
  • У вас есть несколько пунктов в вашем списке (BST, CAT, CST, PST), которые не являются действительными зонами tzdb, даже по списку Joda-Time. Это могут быть сокращения или имена правил, но они не являются идентификаторами зоны.

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