Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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的DateTime->from_epoch返回1969-12-3123:59:59?_Perl_Datetime - Fatal编程技术网

为什么Perl的DateTime->from_epoch返回1969-12-3123:59:59?

为什么Perl的DateTime->from_epoch返回1969-12-3123:59:59?,perl,datetime,Perl,Datetime,我们正在处理来自API的数据,该API返回以下形式的日期/时间值: 1061943540000 当我使用该工具时,它会将值转换为以下正确日期: Tue Aug 26 2003 17:19:00 GMT-0700 (PDT) 我们正在使用以下Perl代码转换脚本中的日期/时间: use DateTime; my $dt = DateTime->from_epoch(epoch => $time); 但是,这会产生以下不正确的输出: 1969-12-31 23:59:59 我完全

我们正在处理来自API的数据,该API返回以下形式的日期/时间值:

1061943540000
当我使用该工具时,它会将值转换为以下正确日期:

Tue Aug 26 2003 17:19:00 GMT-0700 (PDT)
我们正在使用以下Perl代码转换脚本中的日期/时间:

use DateTime;
my $dt = DateTime->from_epoch(epoch => $time);
但是,这会产生以下不正确的输出:

1969-12-31 23:59:59

我完全搞不懂为什么这不起作用,希望有人能解释我做错了什么,我应该用什么代码来正确转换它。提前谢谢

这不是以秒为单位的纪元时间。它看起来有毫秒连接到它。这就搞砸了使用的东西,这是自大纪元以来的第二次。一般来说,Perl从一开始就有一种整秒的思维方式,请参见

正如所给的,你会得到一个遥远的时间。我可能会得到与您不同的日期,因为我的Perl是64位的,并且有Y2038修复程序:

$ perl -MDateTime -E 'say DateTime->from_epoch( epoch => shift() )' 1061943540000
35621-08-26T04:40:00
除以1000可以得到正确的日期,尽管UTC:

$ perl -MDateTime -E 'say DateTime->from_epoch( epoch => shift() / 1000 )' 1061943540000   
2003-08-27T00:19:00

如果您回到您的在线Java工具,您会注意到它给出的日期与1061943540000和1061943540相同。我猜一个是毫秒。这也意味着如果1061943540以毫秒为单位,它给出的日期就错误了

这不是以秒为单位的纪元时间。它看起来有毫秒连接到它。这就搞砸了使用的东西,这是自大纪元以来的第二次。一般来说,Perl从一开始就有一种整秒的思维方式,请参见

正如所给的,你会得到一个遥远的时间。我可能会得到与您不同的日期,因为我的Perl是64位的,并且有Y2038修复程序:

$ perl -MDateTime -E 'say DateTime->from_epoch( epoch => shift() )' 1061943540000
35621-08-26T04:40:00
除以1000可以得到正确的日期,尽管UTC:

$ perl -MDateTime -E 'say DateTime->from_epoch( epoch => shift() / 1000 )' 1061943540000   
2003-08-27T00:19:00

如果您回到您的在线Java工具,您会注意到它给出的日期与1061943540000和1061943540相同。我猜一个是毫秒。这也意味着如果1061943540以毫秒为单位,它给出的日期就错误了

1969-12-31T23:59:59是历元减去1秒,或相当于返回值-1的时间。和-1也是一个常见的错误返回指示器。1969-12-31T23:59:59是历元减去1秒,或相当于将返回值-1视为时间。和-1也是一个常见的错误返回指示器。Java以毫秒为单位报告自纪元以来的时间。只是澄清一下,它不会溢出,因为DateTime无法处理亚秒时间或类似的时间-当您给它一个毫秒数时,它会溢出,但让它认为是秒数:是的,我记得DateTime实际上可以降到纳秒。Java以毫秒为单位报告自纪元以来的时间。只是澄清一下,它不会溢出,因为DateTime不能处理亚秒或类似的时间-当你给它毫秒数时,它会溢出,但让它认为它是秒数:是的,我记得DateTime实际上下降到了纳秒。