Как я могу конвертировать часовые пояса в Perl? - PullRequest
11 голосов
/ 25 февраля 2010

Я пытаюсь преобразовать дату / время GMT 0 в GMT -6 в Perl.

Например, время аренды DHCP-сервера имеет следующий формат:

2010/02/18 23: 48: 37

Я пытаюсь преобразовать это время в местный часовой пояс (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, но я не уверен, как это сделать.

Ответы [ 4 ]

18 голосов
/ 25 февраля 2010

Вызов 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 на America/Chicago
1 голос
/ 11 апреля 2016

Это преобразует время UTC в время ETC. Вы также можете использовать дату / время в любом формате, используя параметр + FORMAT даты.

date --date = 'TZ = "ETC" 18: 30'

0 голосов
/ 29 августа 2013
#!/usr/bin/perl -w
($sec,$min,$hour,$mday,$mon,$year) = gmtime(time+21600);
$year = $year + 1900;
printf("%02d:%02d:%02d %02d.%02d.%04d\n", $hour,$min,$sec,$mday,$mon,$year);
0 голосов
/ 25 февраля 2010

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

...