Perl 为什么我的Time::Piece代码会给出奇怪的结果?
我试图用Perl对两个日期进行基本比较。当前日期时间和过去时间是正确的,但减法给出的结果不正确。差值应为约24小时,但返回约13小时。知道为什么以及如何修复它吗?谢谢Perl 为什么我的Time::Piece代码会给出奇怪的结果?,perl,datetime,time,Perl,Datetime,Time,我试图用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 "Cur
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
这两个时点位于不同的时区。因此,这种差异实际上是正确的。你可以看到这一点
print $now->tzoffset, "\n"; # 7200 (I am in UTC +2 hence have 7200s offset)
print $then->tzoffset, "\n"; # 0
所以基本上,$then
是UTC时间,$now
在您的环境认为它所在的任何时区。
要解决这个问题,您需要决定您想要的时区。正如DeVadder已经指出的,这是因为解析时间默认为
UTC
假设您希望所有事情都使用您的来完成,您实际上可以鼓励解析的时间从本地继承其时区,如下所示:
use Time::Piece;
use strict;
use warnings;
my $now = Time::Piece->new;
my $then = localtime->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";
产出:
Current time: Tue Apr 15 17:12:08 2014
Past time: Mon Apr 14 16:30:20 2014
Diff in Seconds:88908
Pretty Diff:1 days, 0 hours, 41 minutes, 48 seconds