Как я должен определить в следующий раз переход для часового пояса в Perl?

Я работаю над веб-приложением мировых часов, и я хотел бы добавить функцию для замечания, как и когда каждое местоположение затем претерпит изменение DST.

Я использую DateTime и DateTime::Timezone Модули CPAN, которые, кажется, обеспечивают каждую мыслимую функцию кроме этого! DateTime::Timezone реализация tz/Olson базы данных.

До сих пор я сравниваю локальное смещение с UTC, и теперь и 24 часа вперед, который позволяет мне отмечать то, чем эффект состоит всего лишь не точно в том, когда это происходит.

Мое подтверждение концепции вычисляет это каждую минуту. Я думаю, что следующий шаг также:

  • создайте справочную таблицу с помощью похожего метода в течение следующих 365 дней для идентификации затронутых дней, затем посмотрите на каждый час в течение тех дней

  • так или иначе проанализируйте правила DST в DateTime::Timezone модуль.

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


Править:

Похож на другую опцию, мог бы быть должным к порту к PHP и использованию DateTimeZone::getTransitions. Это действительно возвращало массив всех переходов, но PHP 5.3.0 просто добавил дополнительный timestamp_begin и timestamp_end параматери для ограничения диапазоном.

5
задан Brad Gilbert 11 August 2010 в 15:42
поделиться

1 ответ

Недокументированный атрибут _rules объекта DateTime :: TimeZone дает вам массив DateTime :: TimeZone :: OlsonDB :: Правило объектов. Они кодируют начало и конец памятных дат.

my $o = DateTime::TimeZone->new(name => 'Europe/Vienna')->_rules->[1];
say sprintf "%s summertime ends at %s on %s in %s each year", $o->name, $o->at, $o->on, $o->month;

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

9
ответ дан 13 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: