我正在使用DateTime模块。但它提供了错误的时间。请考虑以下代码:
#!/usr/bin/perl -w
use strict;
use Time::localtime;
my $now = ctime();
print $now."\n";
print "------------------------------\n";
use DateTime;
my $dt = DateTime->now;
print $dt."\n";
它的输出是:
Wed Dec 26 22:11:52 2012
------------------------------
2012-12-27T06:11:52
所以,正如您所看到的,DateTime
输出超前8小时是错误的。这是Linux date
命令输出:
# date
Wed Dec 26 22:13:17 PST 2012
因此,date
命令输出与time::localtime
输出的输出匹配。
你能帮我理解我在使用DateTime
模块时出错了吗?
-Thanks。
更新
来自hte CPAN文档:
DateTime->now( ... )
This class method is equivalent to calling from_epoch() with the value returned from Perl's time() function. Just as with the new() method, it accepts "time_zone" and "locale" parameters.
By default, the returned object will be in the UTC time zone.
所以,似乎返回的时间是UTC。但是,我在PST的时区。也许这就是为什么我看到不同的时间。
答案 0 :(得分:8)
我通过了区域信息,现在效果很好:
#!/usr/bin/perl -w
use strict;
use Time::localtime;
my $now = ctime();
print $now."\n";
print "------------------------------\n";
use DateTime;
my $dt = DateTime->now ( time_zone => 'America/Los_Angeles' );
print $dt."\n";
输出:
Wed Dec 26 22:28:44 2012
------------------------------
2012-12-26T22:28:44
东海岸
my $dateF = DateTime->now( time_zone => 'America/New_York' )->ymd;
答案 1 :(得分:1)
用户没有理由知道机器的时区,即使他们知道,硬编码也是个坏主意。答案是
my $dt = DateTime->now(time_zone => 'local') # current time, local timezone
my $dt = DateTime->from_epoch(epoch=>time(), time_zone=>'local') # from timestamp
将其设置为机器的时区。