преобразовать идентификатор часового пояса в имя? (Азия / Калькутта по индийскому стандартному времени) - PullRequest
1 голос
/ 16 июля 2010

Я работаю над проектом php (codeigniter).Я проделал большую работу в часовых поясах, чтобы преобразовать время между разными часовыми поясами и часовым поясом сервера.

Я знаю, как преобразовать идентификатор часового пояса php в его сокращение (например, Азия / Калькутта в IST).Но теперь мне нужно расширение этой аббревиатуры (индийское стандартное время).

Есть ли способ сделать это в php-коде или любом веб-сервисе для его преобразования?Это мой последний шаг в полном освоении программирования часовых поясов!:)

Редактировать: Как заметил один человек, который ответил, сокращения могут быть неоднозначными. Но идентификаторы часовых поясов - нет.Так можно ли напрямую конвертировать "Азия / Калькутта" в "Индийское стандартное время"?В этом нет никакой двусмысленности ..

Ответы [ 4 ]

5 голосов
/ 16 июля 2010

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

Пример:

  • CDT: Центральное летнее время (Америка / Канкун, Америка / Чикаго, ...)
  • CDT: Центральное летнее время Мексики (Америка)
  • CDT: Центральное летнее время Кубы (Америка)
  • CDT: Центральное летнее время Канады (Америка)

Даже IST не уникален:

  • IST: Ирландское летнее время (Европа)
  • IST: индийское стандартное время (Азия)
  • IST: стандартное время Израиля (не в zic)

Однако существует несколько эвристик. Например, PostgreSQL поставляется с несколькими наборами часовых поясов, которые можно менять в зависимости от континента вашей целевой аудитории.

1 голос
/ 04 ноября 2012

@ Муним : Ааа ... Я не знал об этом.Если это так, знаете ли вы, как преобразовать идентификатор часового пояса, такой как Азия / Калькутта, в стандартное индийское время?Там нет никакой двусмысленности ..

Да, (почти) никакой двусмысленности вообще.Почти потому, что идентификатор часового пояса может также соответствовать нескольким аббревиатурам в зависимости от летнего времени и политических изменений.В PHP вы можете сделать это с помощью либо DateTimeZone::listAbbreviations() (но это не очень надежно, поскольку оно показывает все сокращения, использовавшиеся с рассвета tzdb), либо DateTimeZone::getTransitions() - это лучше, так как если вы пересекаете массив в обратном направлениии вернуть первый переход abbr, который не соблюдает летнее время.

1 голос
/ 16 июля 2010

Нет однозначного отображения между сокращениями часовых поясов, смещениями часовых поясов и расширениями часовых поясов. Например, CDT означает Central Daylight Time, что соответствует UTC+10:30 (Австралия) и UTC-5 (Северная Америка). Оно имеет ту же аббревиатуру, но отображается на разных континентах и ​​смещениях времени.

Аналогично, CST - это Central Standard Time и Central Summer Time и отображается на следующие 3 смещения: UTC+9:30, UTC-6 и UTC+10:30

IST, на который вы ссылаетесь выше, также Irish Summer Time и соответствует UTC+1

Итак, чтобы ответить на ваш вопрос, нет, вы не можете этого сделать. Если вы действительно хотите достичь мастерства в программировании часовых поясов, ознакомьтесь со спецификациями ISO для них.

0 голосов
/ 28 декабря 2011

Может, вам стоит посмотреть эту функцию php timezone_name_from_abbr ()

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