Часовой пояс Олсона к окнам

Мне нужно конвертировать часовой пояс из часового пояса Олсона в Windows.
Использование PHP.

я нашел это http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml

Кажется, что нетрудно конвертировать с использованием этих данных.

Но есть вопросы:

1) Могу ли я доверять этому источнику?

2) Как анализировать тип с несколькими значениями:

<mapZone other="Eastern Standard Time" territory="US" type="America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville"/>

Разделенный на космический характер?

  • Америка / Триатлон
  • Америка / Detroit
  • Америка / Индиана / Петербург
  • Америка / Индиана / Винсенс
  • Америка / Индиана / Winamac
  • Америка / Kentucky / Монтичелло
  • Америка / Луисвилл

Но почему в некоторых зонах есть три компонента?

3) Всегда ли при преобразовании часового пояса Олсона => часовой пояс Windows будет получать только 1 часовой пояс или, может быть, больше? И что делать в этом случае?

4) Есть ли подводные камни? Например UTC.

2

Решение

Да, вы можете доверять этому источнику, и это действительно лучший источник для этого типа конверсии. Я использовал те же данные для реализации функции преобразования для .NET.

Поскольку ваш вопрос касается PHP, я буду считать, что это не повторяющийся вопрос — хотя мне любопытно, почему вы хотите сделать это в PHP, поскольку PHP использует часовые пояса IANA / Olson даже в Windows.

Часовые пояса Windows, как правило, шире, чем зоны IANA, что объясняет, почему в сопоставлении существует несколько значений. Список действительно разделен пробелами, а спецификации CLDR требуют, чтобы первый Запись в списке будет канонической ссылкой на CLDR.

Почему в некоторых зонах есть три компонента, это не связано с CLDR, но на самом деле это исходные идентификаторы зон. В Википедии есть хорошее объяснение.

Существует только один идентификатор, идущий от Олсона к Windows — но не обязательно от Windows к Олсону.

Да, есть еще подводные камни:

  • Не все зоны IANA / Olson могут быть сопоставлены с идентификаторами зон Windows. Пример: America/Atikokan

  • CLDR и IANA не согласны с тем, что является каноническим. Канонические идентификаторы CLDR никогда не меняются, тогда как канонические идентификаторы IANA действительно можно изменить, заменив предыдущий идентификатор ссылкой. Это немного затрудняет отображение с Олсона на Windows, потому что вы должны проверить все ссылки.

    Например, Индия Asia/Calcutta в CLDR. Он был обновлен в tzdb IANA для Asia/Kolkata — замена Asia/Calcutta со ссылкой. На карту Asia/Kolkata для Windows «Стандартное время Индии» необходимо проверить все ссылки для зоны на соответствие.

  • CLDR отображает зону Windows «UTC» на «Etc / GMT». IANA считает Etc/UTC (и другие сокращения) как отдельная зона — не ссылка. Таким образом, вы должны справиться с этим вручную.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]