Я пытаюсь использовать метод is_dst()
в модуле DateTime
, чтобы определить, произошел переход на летнее время.Perl Метод DateTime "is_dst()" не работает правильно
Я начал с написания очень простого примера, что я был уверен, что будет работать, но по какой-то причине я получаю неожиданные результаты.
Пример:
#!/usr/bin/perl
use strict;
use warnings;
use DateTime;
my $dt1 = DateTime->new(
'year' => 2015,
'month' => 3 ,
'day' => 8 ,
'hour' => 3 ,
);
my $dt2 = DateTime->new(
'year' => 2015,
'month' => 3 ,
'day' => 7 ,
'hour' => 3 ,
);
print $dt1."\n";
print $dt2."\n";
print $dt1->is_dst()."\n";
print $dt2->is_dst()."\n";
Я начал с датой, что я знал, был переход декретного: воскресенье, 8 марта, 2015. Я выбрал 3 утра, потому что знал, что переход на летнее время уже произошел в этот момент времени.
Тогда я взял дату, я знал, что был до перехода летнее: субботу, 7 марта 2015 также в 3 утра.
Затем я печатаю две даты и соответствующие им флаги DST.
Выход:
2015-03-08T03:00:00
2015-03-07T03:00:00
0
0
Две даты печати точно так, как и ожидалось, но по какой-то причине, даже если первая дата происходит в летнее время, а вторая дата происходит до рассвета время экономии, флаг DST не установлен для обоих из них.
Почему это не работает правильно? Я что-то упускаю?
может быть вам нужен часовой пояс? – Veeram
Когда я добавляю 'time_zone => America/Los_Angeles', это прекрасно :) – zdim