Разница между часовыми поясами Америка / Лос-Анджелес и США / Тихий океан и PST8PDT? - PullRequest
28 голосов
/ 30 ноября 2010

Мне нужно преобразовать несколько дат в базе данных MySQL из тихоокеанского времени (America / Los_Angeles) в UTC. Я нашел отличный ответ SO о том, как это сделать.

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

  • America / Los_Angeles
  • US / Pacific
  • PST8PDT

Итак, мои вопросы следующие:

  • Это все псевдонимы одного и того же? Или в какой-то момент между ними есть реальные различия?
  • Если я хочу предоставить пользователям список часовых поясов на веб-сайте, было бы лучше дать им выбор из группы имен America или группы имен US?

Ответы [ 3 ]

26 голосов
/ 30 ноября 2010

US / Pacific и PST8PDT принадлежат к «другим» часовым поясам , которые сопровождаются этим предупреждением:

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

Все они должны относиться к одному часовому поясу, сравните:

http://www.travelmath.com/time-zone/PST8PDT
http://www.travelmath.com/time-zone/US/Pacific
http://www.travelmath.com/time-zone/America/Los_Angeles

В качестве такового вам следует использовать America / Los_Angeles, что, кстати, также должно быть довольно «естественным» и простым выбором для пользователей.

7 голосов
/ 29 ноября 2017

Я столкнулся с проблемой с параллельными US/Eastern, Americas/New_York и EST5EDT.Вот что я обнаружил.

Для дат после вступления в силу в 1967 г. Закона о едином времени 1966 г. все эти часовые пояса идентичны.Кроме того, в США применялись стандартные правила DST во время мировых войн, поэтому все они идентичны 1918-1919 и 1942-1945 гг.

Для любой даты до 1918 г., между 1920 и 1941 г. включительно и между 1946 и 1966 г. включительно,EST5EDT всегда будет идентичным EST.PST5PDT всегда будет идентичным PST.

До 1967 года Americas/New_York предоставит время , как отмечалось в Нью-Йорке.Таким образом, летнее время будет следовать правилам, установленным муниципалитетом Нью-Йорка или правительством штата Нью-Йорк.Любая дата до 1883 18 ноября 12:03:58 будет в по местному среднему времени со смещением -4: 56: 02 от UTC.Для Americas/Los_Angeles в любое время до 1883 года 18 ноября 12:07:02 будет местное среднее время со смещением -7: 52: 58 от UTC.Между 1883 и 1967 годами Лос-Анджелес следовал правилам летнего времени в Лос-Анджелесе и Калифорнии.

Странные вещи могут произойти, если у вас есть несколько систем, где одна предполагает PST8PDT, а другая - Americas/Los_Angeles.Данные могут выглядеть хорошо для всего недавнего.Например, дата рождения, начиная с лета 1966 года, может быть перенесена на час, а затем усечена, так что кажется, что это произошло в предыдущий день.

И просто для дополнительного удовольствия, если вы имеете дело со старыми датами на Аляске, выНеобходимо помнить, что Аляска была куплена из России.Даты до 1867 18 октября * на другой стороне международной линии дат и используют юлианский, а не григорианский календарь .Так, например, Джуно прошел с 6 октября 1867 года (юлианский) +15: 02: 19 до 18-го октября 1867 (григорианский) -8: 57: 41.

7 голосов
/ 06 августа 2013

US/Pacific - это «ссылка» на America/Los_Angeles в базе данных IANA (см. wikipedia ). В системах Linux, которые я видел, первый является жестко связанным файлом со вторым; на OS X это может быть копия. Если вы запустите контрольную сумму (например, md5 или sha1) для записей в /usr/share/zoneinfo/, 2 должно совпадать.

Однако PST8PDT может отличаться - я точно не понял, как это сделать. Этот отчет об ошибке указывает, что он не отслеживает историю изменений летнего времени, то есть он просто ретроактивно применяет текущие правила летнего времени к прошлому; но это не похоже на случай с этим рубиновым примером. Если бы задним числом применялись текущие правила, оба были бы -0700:

> ENV['TZ']='PST8PDT'
> [Time.mktime(2006, 4, 2, 1, 59, 59), Time.mktime(2006, 4, 2, 2)]
=> [2006-04-02 01:59:59 -0800, 2006-04-02 03:00:00 -0700] 

В это сообщение есть цитата из оригинального сопровождающего базы данных. Автор сообщения объясняет, что унаследованные зоны, включая PST8PDT, раньше имели устаревшую информацию, но теперь «менее корректны», что бы это ни значило.

Подводя итог, не используйте PST8PDT, но это может быть безопасно использовать либо US/Pacific или America/Los_Angeles.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...