Я пытаюсь преобразовать дату/время GMT 0 к GMT-6 в Perl.
Например, время владения Сервера DHCP находится в следующем формате:
18.02.2010 23:48:37
Я пытаюсь преобразовать то время в зону Localtime (GMT-6), но нуждаться в нем для удостаивания Летнего времени.
Сценарий ниже может быть излишеством, но я не уверен, как продолжить двигаться отсюда. (Любые предложения были бы потрясающими).
my $TIMESTART;
$TIMESTART = "2010/02/18 23:48:37";
$TIMESTART =~ s/\//-/g;
use DateTime;
use DateTime::TimeZone;
use DateTime::Format::MySQL;
my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);
my $tz = DateTime::TimeZone->new( name => 'America/Chicago' );
print $tz->offset_for_datetime($dt) . "\n";
Это произведет следующие строки:
2010-02-18T23:48:37
- 21600
Я должен смочь добавить-21600 к дате для получения зоны местного времени GMT-6, но я не уверен как approch это.
Вызов метода set_time_zone
2 раза:
my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);
$dt->set_time_zone('UTC'); ## set timezone of parsed date time
$dt->set_time_zone('America/Chicago'); ## change timezone in safe way
print DateTime::Format::MySQL->format_datetime($dt),"\n"; ## check the result
Как это работает:
DateTime
без указания часового пояса устанавливается «плавающий» часовой пояс set_time_zone
изменить часовой пояс на UTC
без преобразования set_time_zone
изменить UTC
на Америка / Chicago
Time::Piece
- это очень легкий кусок кода хорошего качества. Или вы можете просто использовать встроенные модули и strftime
и POSIX::strptime