我一直在帮助某人调试一些代码,其中错误消息是“Day too big”。我知道这源于当地时间和Y2038错误(大多数谷歌搜索结果似乎都是处理将来的cookie的人)。
我们似乎通过使用时间获取当前日期来“解决”问题。但是,鉴于我们的原始日期都没有达到2038年的问题,我怀疑我们是否已经解决了这个问题......
是否还有其他任何人知道人们会在哪里打“天太大”?
操作系统是Solaris。
示例代码 - 实际代码非常大,我正在使用的人实际上没有隔离出有问题的部分(这就是为什么我担心“修复”实际上并不是一个修复)。如果我能把一些简洁的东西放在一起再现这个问题,我会发布!
更新
我隔离了一些代码,在所有内容周围放了一些打印语句并解决了问题...
令人讨厌的代码行是:
$temp = str2time(localtime());
这通常(但不总是)将$ temp设置为undef。事实证明,即使设置了$ temp,也没有设置预期值。
问题是localtime()在大多数情况下返回一个数组......这就是搞乱str2time的调用。
将此更改为:
$ltime = localtime;
$temp = str2time($ltime);
问题消失了。
当然,更好的是,只需使用:
$temp = time;
答案 0 :(得分:7)
Time::Local
包中有一个“Day too big”消息。如果您想进一步调查,源代码为here。
Carp::Always
模块在这里可能会有所帮助。使用
perl -MCarp::Always script.pl arg1 arg2 ...
以前,只要你收到警告,你就会获得完整的堆栈跟踪。