2010-03-30 2 views
3

J'ai aidé quelqu'un à déboguer du code où le message d'erreur était "Day too big". Je sais que cela vient de l'heure locale et du bogue de Y2038 (la plupart des résultats google semblent être des gens qui gèrent des cookies expirant bien dans le futur).Pourquoi est-ce que je reçois une erreur "Day too big" de Perl?

Nous semblons avoir «résolu» le problème en utilisant l'heure pour obtenir la date actuelle. Cependant, étant donné qu'aucune de nos dates d'origine ne devrait avoir atteint le numéro de 2038, je suis sceptique que nous avons effectivement corrigé le problème ...

Y a-t-il d'autres cas que quelqu'un sait où l'on pourrait frapper "jour trop grand "?

OS est Solaris.

Exemple de code - le code réel est assez grand et la personne avec qui je travaille n'a pas réellement isolé la partie incriminée (c'est pourquoi je m'inquiète que le 'correctif' ne soit pas réellement correctif). Si je peux mettre en place quelque chose de concis qui reproduit le problème, je vais poster!

MISE À JOUR

J'isolé le morceau de code, mettre quelques déclarations d'impression autour de tout et ont résolu le problème ...

La ligne incriminée de code a été:

$temp = str2time(localtime()); 

Ce fut souvent (mais pas toujours) en définissant $ temp comme undef. Il s'avère que même lorsque $ temp était défini, il n'était pas défini avec la valeur attendue. Le getcha est que localtime() renvoie un tableau dans la plupart des contextes ... et c'est ce qui gâche l'appel à str2time.

En changeant ceci:

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

le problème disparaît.

Bien sûr, mieux encore, il suffit d'utiliser:

$temp = time; 
+0

Avez-vous un exemple de code et une description de votre environnement/système d'exploitation? –

Répondre

7

Il y a un message "jour trop grand" du paquet Time::Local. Le code source est here si vous souhaitez étudier plus avant. Le module Carp::Always peut être utile ici. Exécutez le code incriminé avec

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

et où vous avez un avertissement avant, vous allez maintenant obtenir une trace complète de la pile.

+0

+1 pour Carp :: Toujours, c'est tellement utile - Les messages Carp semblent toujours provenir du mauvais paquet. – rjh

Questions connexes