Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么我的Time::Piece代码会给出奇怪的结果?_Perl_Datetime_Time - Fatal编程技术网

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

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

我试图用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

这两个时点位于不同的时区。因此,这种差异实际上是正确的。你可以看到这一点

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