Описание тега timezone

Часовой пояс - это регион на Земле, который имеет единое стандартное время, установленное законом. Часто он представлен идентификатором, например "America/Los_Angeles". Не принимайте смещение, например -07:00, за часовой пояс. Часовой пояс - это гораздо больше. Пожалуйста, прочтите всю вики по тегам для получения подробной информации.

Часовой пояс - это регион на Земле, который имеет единое стандартное время, установленное законом. Поскольку юридические определения зон могут сильно различаться и часто меняться, для правильного применения правил часовых поясов часто требуется база данных или справочная таблица.

Общая информация о часовых поясах

Почти все часовые пояса на суше имеют юридически определенные границы, которые совпадают с границами страны, определяющей время, или некоторого ее подразделения. Большинство часовых поясов на суше имеют смещение стандартного времени от всемирного координированного времени (UTC) на целое количество часов (от UTC-12 до UTC+14), но некоторые смещены на 30 или 45 минут от ближайшего часового пояса. смещение.

Помимо часовых поясов на суше, существует 25 морских часовых поясов, разделенных линиями долготы. Большинство из них (от UTC-11 до UTC+11) имеют ширину 15° долготы, что составляет один час вращения Земли относительно Солнца, но часовая зона в центральной части Тихого океана разделена на две зоны шириной 7,5 ° (UTC±12).) по 180-му меридиану, часть которого совпадает с международной линией перемены дат. Многие наземные часовые пояса смещены к западу относительно соответствующих морских часовых поясов.

До 1972 года все часовые пояса указывались как смещение от среднего времени по Гринвичу (GMT), которое было средним солнечным временем на меридиане, проходящем через Королевскую обсерваторию в Гринвиче, Лондон, Соединенное Королевство. С 1972 года все официальные службы времени транслируют радиосигналы времени, синхронизированные с UTC, формой атомного времени, которая включает в себя дополнительные секунды, чтобы удерживать его в пределах 0,9 секунды от этого бывшего GMT, теперь называемого UT1. Многие страны теперь юридически определяют свое стандартное время относительно UTC, хотя некоторые по-прежнему юридически ссылаются на GMT, включая само Соединенное Королевство. UTC, также называемое зулусским временем, используется повсюду на Земле астрономами и другими людьми, которым необходимо однозначно указать время события.

Первоначально все время на Земле было некоторым местным видимым солнечным временем, временем на солнечных часах, поэтому в каждом городе было свое время. Когда в начале 19 века получили широкое распространение механические часы с хорошей регулировкой, каждый город начал использовать некоторое местное среднее солнечное время. Первый часовой пояс был создан в 1847 году железными дорогами на острове Великобритания с использованием GMT. Сэндфорд Флеминг из Канады предложил всемирные часовые пояса в 1879 году. Примерно к 1900 году почти все время на Земле было в форме стандартных часовых поясов, только некоторые из которых использовали почасовое смещение от GMT. Многие применяли время в местной астрономической обсерватории ко всей стране без привязки к Гринвичу. Прошло много десятилетий, прежде чем все время на Земле было в форме часовых поясов, относящихся к некоторому "стандартному смещению" от GMT/UTC. Непал был последней страной, принявшей стандартную компенсацию,немного сдвинулся к UTC+5:45 в 1986 году. Однако во многих странахизменили свое стандартное смещение с тех пор, например, когда Северная Корея перешла с UTC+9 на UTC+8:30 в 2015 году.

Связанное с этим понятие - переход на летнее время или летнее время, которое представляет собой (обычно) один час вперед, установленный во многих странах между весной и осенью.

Часовой пояс!= Смещение

Часовой пояс не может быть представлен только смещением от UTC. Многие часовые пояса имеют более одного смещения из-за правил перехода на летнее время (также известного как "летнее время"). Даты изменения смещения также являются частью правил для часового пояса, как и любые исторические изменения смещения. Многие программы, библиотеки и веб-сервисы игнорируют эту важную деталь и ошибочно называют стандартное или текущее смещение "зоной". Это может привести к путанице и неправильному использованию данных. По возможности используйте правильную терминологию.

  • Смещение просто число, которое представляет, насколько конкретное значение даты / времени впереди или позади UTC.
    • Большинство смещений выражается в целых часах.
    • Но есть многие, которые имеют 30-минутный зачет.
    • И есть несколько, которые имеют 45-минутное смещение.
  • Временная зона содержит гораздо больше:
    • Имя или идентификатор, который можно использовать для идентификации зоны.
    • Одно или несколько смещений от UTC
    • Конкретные даты и время перехода зоны между смещениями.
    • Иногда отдельное отображаемое имя для конкретного языка, которое может быть представлено пользователю.

Можно определить правильное смещение, учитывая часовой пояс и дату и время. Но невозможно определить правильный часовой пояс с учетом только смещения.

Аббревиатуры часовых поясов

Часто вы будете видеть сокращенное обозначение часового пояса, состоящее из трех или более букв, например PSTдля сокращения "Тихоокеанского стандартного времени". Однако есть много проблем с сокращениями часовых поясов:

  • Часто они неоднозначны. Например, существует пять различных интерпретацийCST:

    • Центральное стандартное время (Северная Америка)
    • Центральное стандартное время (Австралия)
    • Центральное летнее время (Австралия)
    • Китайское стандартное время
    • Стандартное время Кубы

    См. Также список сокращений часовых поясов в Википедии.

  • В лучшем случае они представляют только смещение часового пояса, а не часовой пояс. Например, тихоокеанский часовой пояс США сокращен.PSTво время стандартного тихоокеанского времени, но используетPDTв тихоокеанское летнее время.

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

  • Некоторые часовые пояса могут никогда не использовать аббревиатуру в регионе, где наблюдается часовой пояс.

Как правило, если используется сокращение, оно должно использоваться для отображения. Аббревиатуру нельзя анализировать или искать в списке значений (за исключением "UTC" или "GMT").

Базы данных часовых поясов

В вычислениях обычно используются две разные базы данных часовых поясов:

База данных часовых поясов Microsoft Windows

  • Пример идентификатора: "Eastern Standard Time"

Вы можете получить список этих часовых поясов любым из следующих способов:

  • Изучите раздел реестра Windows по адресу:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
  • Использовать tzutil.exe /lутилита командной строки, просматривая вторую строку каждого результата.
    (Первая строка - это отображаемое имя.)
  • Вызов TimeZoneInfo.GetSystemTimeZones из.NET, глядя на Id свойство полученного TimeZoneInfo объекты.
  • Позвоните в EnumDynamicTimeZoneInformation Функция Win32, глядя на TimeZoneKeyName поле результирующего DYNAMIC_TIME_ZONE_INFORMATION объекты.

Преимущества

  • Встроен в операционную систему Windows.
  • Обновления развертываются автоматически через Центр обновления Windows.
  • Легко использовать из Win32 или.NET Framework в Windows.
  • По состоянию на июньское обновление 2016 года охватывает всю Землю, за исключением нескольких исследовательских станций в Антарктиде.

Недостатки

  • Поддерживается Microsoft, а не органом или сообществом по стандартизации.
  • Зоны, как правило, широкие, охватывают несколько стран и мест, а не ограничиваются конкретным узким местом.
  • Данные за прошлые годы, как правило, не уходят очень далеко в историю и несовместимы с начальным годом для данных, которые у них есть для каждого часового пояса.
  • Взаимодействие с платформами сторонних производителей может быть болезненным.
  • Обновляется в лучшем случае ежемесячно - что может или не может быть достаточно частым, чтобы иметь дело с изменением за короткий срок.
    • Ранее многие изменения выпускались только как исправления, но в последние годы это было изменено, так что все изменения развертываются как регулярные обновления.
  • Идентификаторы и имена сбивают с толку и назначаются бессистемно. Соглашения об именах менялись на протяжении многих лет, и согласованности между ними нет. В общем, не полагайтесь на идентификатор часового пояса Windows как на что-то конкретное. Вместо этого выберите часовой пояс на основе его отображаемого имени.

    Несколько примеров:

    • "Восточное стандартное время" относится как к EST, так и к EDT.
    • "Горное стандартное время" - для MST/MDT, а "Горное стандартное время США" - для Аризоны, которое установлено на MST.
    • "Восточное стандартное время США" действительно имеет летнее время с 2006 года и далее (но не для 2005 года или ранее). Он используется на большей части штата Индиана.
    • "Романтическое стандартное время" - это просто синоним центральноевропейского времени.
    • "Стандартное время по Гринвичу" относится к времени в Великобритании и Ирландии, которое чередуется между GMT (UTC+0) и BST или IST (UTC+1), а не строго по отношению к самому GMT. (Для круглогодичного GMT используйте идентификатор "UTC".)
    • " Западноевропейское стандартное время" - это идентификатор для нескольких стран, которые принадлежат к часовому поясу Центральной Европы, а не к часовому поясу Западной Европы.
    • "Стандартное время Восточной Австралии" и "Стандартное время Восточной Австралии" различаются только летним временем.
    • "Арабское стандартное время", "Арабское стандартное время" и "Арабское стандартное время" - это три совершенно разных часовых пояса с похожими названиями.
    • "Стандартное тихоокеанское время" и "Стандартное тихоокеанское время" также совершенно разные.
    • "Часовой пояс России 3", "Часовой пояс России 10" и "Часовой пояс России 11" являются допустимыми идентификаторами, но другие часовые пояса России имеют имена вместо цифр.
    • "UTC", "UTC-02", "UTC-08", "UTC-09", "UTC-11" и "UTC+12" являются допустимыми идентификаторами, а другие смещения - нет.
  • Как упоминалось выше, часовые пояса Windows также имеют отображаемое имя.
    Например,"(UTC-05:00) Eastern Time (US & Canada)".

    • Эти имена содержат смещение часового пояса, но эти смещения представляют собой стандартное смещение времени, а не текущее смещение. Это может сбивать с толку, поскольку указанное смещение может не совпадать с действующим.
    • Отображаемые имена локализованы в соответствии с языковыми настройками операционной системы Windows. При использовании черезTimeZoneInfoв.NET локализации не обновляются, чтобы отразить текущую культуру или текущую культуру пользовательского интерфейса. Например, у вас может быть приложение, которое предоставляет данные англоговорящему пользователю, но при размещении на японском сервере отображаемые имена часовых поясов будут представлены на японском языке.

База данных часовых поясов IANA/Olson

Также известна как ZoneInfo, TZDB или база данных TZ.

  • Пример идентификатора: "America/New_York"

Преимущества

  • Широко реализован на Linux, Mac, Java, PHP и многих других платформах.
  • Библиотеки доступны для JavaScript и для Windows/.Net.
  • Изысканные часовые пояса, названные в честь образцового города.
  • Покрывает всюду на Земле.
  • Содержит исторические данные об изменении часовых поясов.
  • Упоминается во многих RFC и других стандартах.
  • Сообщество поддерживается, недавно поддержано IANA.
  • Частые обновления, несколько раз в год.
  • Некоторые реализации позволяют легко получать обновления:

Недостатки

  • Большинство реализаций требуют ручного обновления, например Noda Time, Joda Time, PHP и другие. (Однако возможность обновления вручную может считаться преимуществом.)
  • Зон так много, что может быть сложно представить пользователям простой раскрывающийся список. Однако выбор часового пояса на основе карты, такой как этот, может обеспечить удобство работы пользователей.

Подробнее читайте в Википедии.

Карта часовых поясов IANA/Olson

На этой карте показана мировая карта часовых поясов IANA/Olson. Обратите внимание, что во многих странах есть несколько часовых поясов.

Карта мира TZDB Предоставлено: Эрик Мюллер.

Дополнительные карты часовых поясов доступны в Time_zone в Википедии.

Роль CLDR

Репозиторий данных Unicode Common Locale поддерживает локализованные переводы имен часовых поясов IANA/Olson, а также сопоставление между идентификаторами Microsoft Windows и идентификаторами IANA/Olson.

Данные сопоставления доступны во второй таблице на этой странице или в формате xml здесь. Обратите внимание, что обычно существует более одной возможной зоны IANA/Olson для любой данной зоны Windows. Таким образом, можно преобразовать зону Олсона в одну зону Windows, но в другом направлении будет несколько возможных вариантов. Также обратите внимание, что, хотя отображается каждая зона Windows, не каждая зона IANA/Olson. Таким образом, всегда можно перейти из зоны Windows в (одну или несколько) зон IANA/Olson, но не обязательно наоборот.

Связанный: Как преобразовать часовые пояса Microsoft в часовые пояса IANA в.NET.

Часовые пояса в стиле POSIX

До принятия баз данных часовых поясов стандартный способ описания часовых поясов был определен спецификацией POSIX, как установлено вTZ переменная окружения.

Примеры:

  • PST8PDT
  • CET-1CEST,M3.5.0/2,M10.5.0/3
  • GRNLNDST3GRNLNDDT,M10.3.0/00:00:00,M2.4.0/00:00:00

Хотя этот компактный формат позволяет выражать правила часовых поясов без базы данных, у него есть несколько недостатков:

  • Не может выразить более двух переходов в год, поэтому он не может обрабатывать реальные события, такие как Египет в 2010 году или Марокко в 2012, 2013 и 2014 годах.
  • Содержит только правила текущего часового пояса, поэтому его нельзя использовать для точного преобразования исторических изменений, например, США до 2007 года.
  • Иногда загадочные и трудные для чтения.

К счастью, в большинстве сред, в которых принята переменная TZ, теперь можно передавать вместо этого идентификатор IANA/Olson. Например, посмотрите третий вариант работы с часовыми поясами в glibc.

У IBM есть хорошая статья о форматах часовых поясов POSIX и Olson здесь. (Это было написано для AIX, но применимо во многих других контекстах.)

Идентификаторы часовых поясов Rails

Если вы разработчик Ruby on Rails или используете API из приложения, созданного с помощью Rails (например, Twitter), вы можете встретить идентификаторы часовых поясов в несколько другом формате, например:

  • "Eastern Time (US & Canada)" (вместо того "America/New_York")
  • "London" (вместо того "Europe/London")

Эти идентификаторы определены Rails в классе ActiveSupport::TimeZone. Исходный код этого класса находится здесь. Они основаны на стандартных часовых поясах IANA/Olson. Rails описывает их как "значимое подмножество из 146 зон", однако не описывает, по каким критериям он определяет зону как "значимую".

Хотя эти конкретные зоны должны нормально работать в приложении Rails, вам может быть трудно использовать их в других контекстах. Например, если вам нужно передать часовой пояс в библиотеку JavaScript или через REST API какой-либо третьей стороне, может быть сложно использовать их в формате Rails. Разработчики Rails должны рассмотреть один из двух подходов:

  • При открытии идентификатора часового пояса Rails извне используйте ActiveSupport::TimeZone::MAPPING константа, которая определяет словарь обратно к стандартным идентификаторам зоны IANA/Olson.
  • Используйте Ruby TZinfo Gem вместоActiveSupport::TimeZone. Он обеспечивает доступ к полной базе данных часовых поясов IANA/Olson и использует стандартные идентификаторы.

Связанный: Как преобразовать часовые пояса Microsoft в часовые пояса Rails.