为什么Perl的DateTime->from_epoch返回1969-12-3123:59:59?
我们正在处理来自API的数据,该API返回以下形式的日期/时间值:为什么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 我完全
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实际上下降到了纳秒。