Время перехода на UTC, часовые пояса, переход на летнее и летнее время - PullRequest
0 голосов
/ 22 марта 2012

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

Например, мое ежедневное расписание (местное время):

  • 8: 00 AM - Отправить письмо Джону в Торонто, Канада
  • 9: 15 AM Western Standard Time (Австралия) - Отправить письмо Бобу в Перте, Австралия
  • 22: 12 - Отправьте электронное письмо Анасу в Рабате, Марокко

Я хочу иметь возможность выполнять этот код на сервере Amazon EC2 в одном месте (например, Сан-Паулу, Бразилия).

Я также знаю, что в Торонто по восточному поясному времени (UTC - 5 часов), но с 11 марта 2012 года по 4 ноября 2012 года по восточному поясному времени (UTC - 4 часа).

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

Я также знаю, что Рабат находится в западноевропейском времени (UTC), но с 29 апреля 2002 года по июль 20,2012 года и с 19 августа 2012 года по 30 сентября 2012 года он находится в западноевропейском летнем времени (UTC + 1 час)

Чтобы отслеживать эти комбинации часового пояса, летнего времени и т. Д., Я, конечно, буду настаивать на том, чтобы все внутреннее время сервера было в UTC. Однако мне нужен какой-то способ отслеживать, когда и как каждая юрисдикция часовых поясов переключает часовые пояса из-за перехода на летнее время или (в случае с Рабатом) Рамадана, а затем настраивать свои crontabs для учета этих изменений.

Есть ли где-нибудь авторитетный веб-сервис или набор таблиц, которые помогли бы мне синхронизировать эти изменения часового пояса с моим желанием ежедневно отправлять электронные письма в одно и то же местное время пользователям в разных часовых поясах с разными датами перехода на летнее время?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Большинство языков программирования предоставляют вам доступ к функциям преобразования часовых поясов.Самые элементарные из них работают только между UTC и «локальным» часовым поясом сервера, поэтому вам понадобится полнофункциональный, например pytz для Python, который позволит вам указать местное время с часовым поясомимя (например, "Америка / Торонто") и конвертировать его в UTC для вас.Учитывая это, вам не нужно беспокоиться о смещениях UTC в разных часовых поясах (включая исторические смещения, если они изменились), а также о времени окончания начала DST: библиотека позаботится об этом за вас.Просто убедитесь, что у вас самая последняя база данных, которая входит в пакет tzdata .

Что касается вашего crontab, то вам, вероятно, лучше, если локальный часовой пояс на сервере, на котором выполняется cron,UTC, таким образом, вы можете указывать время UTC непосредственно в crontab.С другой стороны, в зависимости от объема событий, которые у вас есть, я бы посоветовал просто запускать ваш код cron через регулярные интервалы расписаний (например, каждые 5 минут), а затем ваш код выясняет, какие события нужно запускать, основываясь натекущее время UTC и содержимое вашей базы данных.Тогда не имеет значения, какой часовой пояс у сервера.

0 голосов
/ 10 июля 2014

Есть ли где-нибудь авторитетный веб-сервис или набор таблиц ...

Нет, нет ничего "авторитетного" , но есть что-то близкое. Она называется TZ database и в настоящее время находится под надзором IANA. Его домашняя страница здесь .

Он также известен как tzdata, zoneinfo, timezonedb, tzdb, база данных Olson или база данных часовых поясов IANA.

Существуют реализации практически для каждого языка и платформы, которые вы можете себе представить. Вы можете прочитать больше в файле tz-link из tzdb , а также в вики-теге , в StackOverflow .

...