2010-03-30 65 views
3

我一直在幫助某人調試錯誤消息是「一天太大」的代碼。我知道這是由當地時間和Y2038錯誤引發的(大部分谷歌搜索結果似乎是處理cookie的人將會過期)。爲什麼我從Perl中得到「Day too large」錯誤?

我們會通過時間來獲得當前的日期已經「固定」的問題。然而,鑑於我們的原始日期都不應該觸及2038年的問題,我懷疑我們實際上已經解決了這個問題......

是否有其他實例,任何人都知道哪裏會打「一天太大「?

OS是Solaris操作系統。

示例代碼 - 實際的代碼是相當大的,我有沒有實際孤立有問題的部分工作的人(這就是爲什麼我擔心的「修復」實際上不是修復)。如果我能把一些簡潔的東西放在一起再現這個問題,我會發布!

UPDATE

我孤立的碼位,把周圍的一切都有些打印報表已經解決了這個問題...

問題的代碼行是:

$temp = str2time(localtime()); 

這是經常(但並非總是)將$ temp設置爲undef。事實證明,即使設置了$ temp,它也沒有被設置爲預期值。

的小問題,就是本地時間()返回在大多數情況下數組......和那正是搞亂調用str2time。

通過這一改變到:

$ltime = localtime; 
$temp = str2time($ltime); 

問題消失。

當然,更重要的是,只需使用:

$temp = time; 
+0

你有示例代碼和環境/ OS的描述? – 2010-03-30 05:27:56

回答

7

有來自Time::Local包「節太大」的消息。如果您想進一步調查,源代碼是here

Carp::Always模塊可能會有所幫助在這裏。運行與

perl -MCarp::Always script.pl arg1 arg2 ... 

違規代碼,並且不管你之前有一個警告,你現在會得到一個完整的堆棧跟蹤。

+0

+1對於鯉魚::總是如此有用 - 鯉魚消息似乎總是來自錯誤的包裝。 – rjh 2010-03-30 23:10:11