Как я могу я преобразовывать часовые пояса в Perl?

Я пытаюсь преобразовать дату/время 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 это.

11
задан brian d foy 24 February 2010 в 22:40
поделиться

2 ответа

Вызов метода 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
18
ответ дан 3 December 2019 в 07:12
поделиться

Time::Piece - это очень легкий кусок кода хорошего качества. Или вы можете просто использовать встроенные модули и strftime и POSIX::strptime

0
ответ дан 3 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

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