[PERL] date année ... encore ....grrr

Résolu/Fermé
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 - 19 mai 2009 à 15:24
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 - 19 mai 2009 à 22:46
Bonjour,

Je viens de découvrir un petit bug dans un de mes script perl (que j'avais fait il y a quelque mois avec l'aide de nombre d'entre vous),

Il ne récupère pas le bon numéro de mois ... 4 au lieu de 5 pour le mois de MAI (may pour les anglophone)
# Constantes
@monthNames = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
%monthNums = qw(
    Jan  1 Feb  2 Mar  3 Apr  4 May  5 Jun  6
    Jul  7 Aug  8 Sep  9 Oct  10 Nov 11 Dec 12);
($thisMon, $thisYr) = (localtime(time()))[4,5];
$thisYr += 1900;

print localtime(time())."\n";
print "thisMon : $thisMon\n";
print "thisYr : $thisYr\n\n";


a l'éxecution ça donne :
Tue May 19 15:14:35 2009
thisMon : 4
thisYr : 2009


Merci d'avance pour votre aide ...

Stéphane

6 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 mai 2009 à 15:30
Salut,

# Constantes
@monthNames = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
%monthNums = qw(
    Jan  1 Feb  2 Mar  3 Apr  4 May  5 Jun  6
    Jul  7 Aug  8 Sep  9 Oct  10 Nov 11 Dec 12);
($thisMon, $thisYr) = (localtime(time()))[4,5];
$thisYr += 1900;
$thisMon +=1;

print localtime(time())."\n";
print "thisMon : $thisMon\n";
print "thisYr : $thisYr\n\n";

1
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 mai 2009 à 22:37
Re,

ça ne me confirme pas que le code est foireux depuis le début et que ceci fonctionnera le mois prochain ...

Ben, il suffit de voir la fonction localtime de perl et tu comprendras que ça fonctionnera même l'année prochaine

Voici un extrait de la commande perldoc -f localtime

localtime EXPR
localtime
Converts a time as returned by the time function to a 9-element list with the time analyzed for the local time zone. Typically used as follows:

# 0 1 2 3 4 5 6 7 8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);

All list elements are numeric, and come straight out of the C `struct tm'. $sec, $min, and $hour are the seconds, minutes, and hours of the specified time.

$mday is the day of the month, and $mon is the month itself, in the range 0..11 with 0 indicating January and 11 indicating December. This makes it easy to get a month name from a list:


Donc tu vois bien que les mois sont numérotés de 0 à 11 ce qui veut dire que tu dois ajouter 1 pour avoir de 1 à 12.
1
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 2
19 mai 2009 à 15:33
euuu ...t'es sûr ?

parceque si le mois prochain ça passe à 7 au lieu de 6, je meurt ... il faut ajouter parceque ça démarre à 0 ? ce qui voudrait dire que mon super code de la mort il est foireux depuis des mois ??????

(inutile de taper sur une ambulance ...)

Stéphane
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 mai 2009 à 19:35
Re,

Euuu ...t'es sûr ?
Au lieu de poser la question et au lieu de te répondre, il fallait (je l'ai fais ;-) faire un petit test ;-))
lami20j@debian:~/trash$ cat mois.pl
#!/usr/bin/perl
use strict;use warnings;

my ($thisMon, $thisYr) = (localtime(time()))[4,5];
$thisYr += 1900;
$thisMon +=1;

print localtime(time())."\n";
print "thisMon : $thisMon\n";
print "thisYr : $thisYr\n\n";
__END__
lami20j@debian:~/trash$ perl mois.pl
Tue May 19 19:33:43 2009
thisMon : 5
thisYr : 2009

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 2
19 mai 2009 à 21:54
Hello,

Sans vouloir te paraitre insistant, ceci ne confirme pas la solution ...

Je suis d'accord avec toi qu'incrémenter le compteur mois passe bien le mois à 5 pour may, cependant, ça ne me confirme pas que le code est foireux depuis le début et que ceci fonctionnera le mois prochain ... pour bien faire il faudrait que je change la date systeme du linux ... (impossible vu qu'il fait tourner du postfix en continue) ...

ou faire l'opération sur une fausse date et pas sur le localtime mais là on part sur un test biaisé ...(sans jeu de mot)

En tout cas, merci, je suis traumatisé d'avoir pu passer à côté de ce genre d'erreur pendant des mois ...

Stéphane
0
sbouli Messages postés 200 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 14 août 2014 2
19 mai 2009 à 22:46
et pan dans les dents ... encore bravo lami20j ...

MERCI :o)

Stéphane
0