为什么我从Perl那里得到“Day too big”错误?

时间:2010-03-30 04:39:35

标签: perl date

我一直在帮助某人调试一些代码,其中错误消息是“Day too big”。我知道这源于当地时间和Y2038错误(大多数谷歌搜索结果似乎都是处理将来的cookie的人)。

我们似乎通过使用时间获取当前日期来“解决”问题。但是,鉴于我们的原始日期都没有达到2038年的问题,我怀疑我们是否已经解决了这个问题......

是否还有其他任何人知道人们会在哪里打“天太大”?

操作系统是Solaris。

示例代码 - 实际代码非常大,我正在使用的人实际上没有隔离出有问题的部分(这就是为什么我担心“修复”实际上并不是一个修复)。如果我能把一些简洁的东西放在一起再现这个问题,我会发布!

更新

我隔离了一些代码,在所有内容周围放了一些打印语句并解决了问题...

令人讨厌的代码行是:

$temp = str2time(localtime());

这通常(但不总是)将$ temp设置为undef。事实证明,即使设置了$ temp,也没有设置预期值。

问题是localtime()在大多数情况下返回一个数组......这就是搞乱str2time的调用。

将此更改为:

$ltime = localtime;
$temp = str2time($ltime);
问题消失了。

当然,更好的是,只需使用:

$temp = time;

1 个答案:

答案 0 :(得分:7)

Time::Local包中有一个“Day too big”消息。如果您想进一步调查,源代码为here

Carp::Always模块在​​这里可能会有所帮助。使用

运行违规代码
perl -MCarp::Always script.pl arg1 arg2 ...

以前,只要你收到警告,你就会获得完整的堆栈跟踪。