给定999年之前的时间,我如何准确地将其转换为相应的纪元值?
你不能用Time :: Local.timegm(使用者timelocal)包含以下内容:
if ( $year >= 1000 ) {
$year -= 1900;
}
elsif ( $year < 100 and $year >= 0 ) {
$year += ( $year > $Breakpoint ) ? $Century : $NextCentury;
}
Run Code Online (Sandbox Code Playgroud)
如果年份在0到100之间,那么它将自动转换为当前世纪的一年,如文档中所述; 从1900年开始,100到999之间的年份被视为抵消.如果不破解来源,你就无法解决这个问题.
如果您的perl编译为使用64位整数*,则可以使用DateTime模块:
use strict;
use warnings 'all';
use 5.010;
use DateTime;
my $dt = DateTime->new(
year => 1,
month => 1,
day => 1,
hour => 0,
minute => 0,
second => 0,
time_zone => 'UTC'
);
say $dt->epoch;
Run Code Online (Sandbox Code Playgroud)
输出:
-62135596800
Run Code Online (Sandbox Code Playgroud)
请注意,公历直到1582年才被采用,所以DateTime通过简单地从1582向后延伸使用所谓的"预感格里高利历".
*对于32位整数,过去或将来过多的日期将导致整数溢出.你的perl支持64位整数,如果use64bitint=define出现在输出中perl -V(带有大写'V').