我想在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";
它将输出以下行:
2010-02-18T23:48:37个
-21600
我需要能够在日期中添加-21600以获得GMT -6的当地时区,但我不确定如何解决这个问题。
答案 0 :(得分: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
工作原理:
DateTime
对象时,设置“浮动”时区set_time_zone
将时区更改为UTC
而不进行转换set_time_zone
将UTC
更改为America/Chicago
答案 1 :(得分:0)
Time::Piece
是一个非常轻量级的优质代码。或者您可以使用内置插件strftime
和POSIX::strptime
答案 2 :(得分:-2)
#!/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);