为什么我的Time :: Piece代码给出了奇怪的结果?

use*_*233 6 perl time datetime

我试图做在Perl两个日期的基本比较.当前日期时间和过去时间是正确的,但减法给出不正确的结果.其差额应当至24小时又返回〜13小时.任何想法,为什么,以及如何解决它?谢谢.

use Time::Piece;

my $now = Time::Piece->new;
my $then = Time::Piece->strptime("2014-04-14 16:30:20", "%Y-%m-%d %H:%M:%S");
my $diff = $now - $then;

print "Current time: $now\n";
print "Past time: $then\n";
print "Diff in Seconds:", $diff, "\n";
print "Pretty Diff:", $diff->pretty, "\n";

Results
------
Current time: Tue Apr 15 16:13:39 2014
Past time: Mon Apr 14 16:30:20 2014
Diff in Seconds:49399
Pretty Diff:13 hours, 43 minutes, 19 seconds
Run Code Online (Sandbox Code Playgroud)

DeV*_*der 9

这两个时间点位于不同的时区.所以差异实际上是正确的.你可以看到

print $now->tzoffset, "\n";    # 7200 (I am in UTC +2 hence have 7200s offset)
print $then->tzoffset, "\n";   # 0
Run Code Online (Sandbox Code Playgroud)

所以基本上$then是UTC时间,而$now在任何时区环境认为它是为了解决这个问题,你需要在你想要什么时区决定.