鉴于这些时代:
添加613天(613*24*3600秒)给出:
这怎么可能?
在UTC中,所有日子都有24小时,因此在使用该时区时问题不会出现.
$ TZ=Etc/UTC date --date=@1425884400 +'%Y-%m-%d %H:%M:%S'
2015-03-09 07:00:00
$ TZ=Etc/UTC date --date=@1478847600 +'%Y-%m-%d %H:%M:%S'
2016-11-11 07:00:00
Run Code Online (Sandbox Code Playgroud)
但你没有使用UTC.由于DST的变化,并非所有日子在许多时区都有24小时.例如,2016年11月6日在America/Los_Angeles长达25小时,因此1478847600比该时区的1425884400晚613天短一小时.
$ TZ=America/Los_Angeles date --date=@1425884400 +'%Y-%m-%d %H:%M:%S'
2015-03-09 00:00:00
$ TZ=America/Los_Angeles date --date=@1478847600 +'%Y-%m-%d %H:%M:%S'
2016-11-10 23:00:00
Run Code Online (Sandbox Code Playgroud)
使用DateTime等模块可以避免这些问题.
$ perl -e'
use DateTime qw( );
my $dt = DateTime->from_epoch(
epoch => 1425884400,
time_zone => "America/Los_Angeles", # Often "local"
);
CORE::say( $dt );
$dt->add( days => 613 );
CORE::say( $dt );
CORE::say( $dt->epoch );
'
2015-03-09T00:00:00
2016-11-11T00:00:00
1478851200 # Not 1478847600!
Run Code Online (Sandbox Code Playgroud)