Я работаю над веб-приложением мировых часов, и я хотел бы добавить функцию для замечания, как и когда каждое местоположение затем претерпит изменение 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
параматери для ограничения диапазоном.
Недокументированный атрибут _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.