我怎样才能在Perl中转换时区?

jin*_*wow 11 perl datetime gmt

我想在Perl中将日期/时间GMT 0转换为GMT -6.

例如,DHCP服务器租约时间采用以下格式:

2010/02/18 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";
Run Code Online (Sandbox Code Playgroud)

它将输出以下行:

2010-02-18T23:48:37
-21600

我需要能够在日期中添加-21600以获得GMT -6的本地时区,但我不知道如何解决这个问题.

Iva*_*uev 18

呼叫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
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • 当您创建DateTime没有指定时区的对象时,会设置"浮动"时区
  • 首次调用set_time_zone更改时区为UTC无转换
  • 第二呼叫set_time_zone改变UTCAmerica/Chicago