1970年格式化之前的Perl时代

时间:2012-10-07 13:07:45

标签: perl epoch localtime

我在Perl的1/1/1970纪元之前格式化并处理日期,日期以负整数形式返回:

my $time=timelocal(0, 0, 0, 1, 1, 1969);
print "$time\n"; 
$theTime = localtime($time); 
print "the time is good: $theTime\n\n";

如何处理Perl中的纪元之前的日期,在unix和windows上都有同样的问题Perl 5.8.8。 PHP显示日期正常没有问题。

3 个答案:

答案 0 :(得分:2)

您是否尝试过使用DateTime

答案 1 :(得分:2)

如果perl打印一个负整数,这是一个很好的行为,因为01/01/1970是这个日期格式的零日。在https://en.wikipedia.org/wiki/Unix_epoch

上搜索否定一词

shell中的一个例子:

$ date -d "1957-10-04T00:00:00Z" +%s
-386380800

这是正确的。

答案 2 :(得分:2)

  

我需要将此负数传递给localtime或其他函数以返回格式化日期时间数组。

好的,什么阻止了你?

# ActivePerl on Windows
>perl -E"say ''.localtime(-386380800)"
Thu Oct  3 20:00:00 1957

# Linux
$ perl -E'say "".localtime(-386380800)'
Thu Oct  3 16:00:00 1957

# Cygwin
$ perl -E'say "".localtime(-386380800)'
Thu Oct  3 16:00:00 1957