2

我在 Perl 中格式化和处理 1970 年 1 月 1 日之前的日期时遇到问题,日期以负整数形式返回:

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 显示日期正常,没有问题。

4

3 回答 3

2

你试过使用DateTime吗?

于 2012-10-07T13:09:43.167 回答
2

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

shell 中的一个例子:

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

这是对的。

于 2012-10-07T13:17:15.690 回答
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
于 2012-10-07T18:26:17.767 回答