localtime pas si simple ...
Hello,
Bon, j'avais vu dans un des fils ici que l'on pouvait utiliser localtime pour récupérer la date courante. Je me dis cool, pour générer un nom de fichier c'est plustôt intéressant !!
Mais la syntaxe est plutôt du genre pas super triviale, et d'ailleurs erronée dans le-dit fil, bref, il m'a fallu un moment pour maîtriser la bête !
Donc je veux un nom de fichier du genre ANNEEMOISJOUR, j'y arrive ainsi :
Code:
1 2 3
| $tmpo= 1900+(localtime)[5];
$tmpo= $tmpo.(localtime)[4]+1;
$tmpo= $tmpo.(localtime)[3]; |
Mais je ne trouve pas cela satisfaisant, est-il possible d'obtenir le même résultat en une seule ligne ??
Usti
Re: localtime pas si simple ...
Bonjour,
Citation:
Envoyé par ustilago
Donc je veux un nom de fichier du genre ANNEEMOISJOUR, j'y arrive ainsi :
Code:
1 2 3
| $tmpo= 1900+(localtime)[5];
$tmpo= $tmpo.(localtime)[4]+1;
$tmpo= $tmpo.(localtime)[3]; |
Mais je ne trouve pas cela satisfaisant, est-il possible d'obtenir le même résultat en une seule ligne ??
Tu as raison, ce n'est pas satisfaisant ;)
Au moins pour une raison simple : tu fais trois appels distincts à la fonction localtime pour récupérer trois informations. Le problème, c'est que le temps passe, pendant ce temps là ...
Imagine le pire ... le script tourne le 31/12/2005, à 23h59:59.9999 ...
Le premier localtime te donne 2005, pour l'année.
Le temps passe (ton script peut même être bloqué le temps qu'une autre tâche du système passe) et le jour change ...
Les deux derniers localtime te donnent alors 01/01.
Super, nous sommes le 31/12/2005 ou le 01/01/2006 et le script nomme le fichier 20050101 8O
Le faire en une seule ligne, je ne suis pas sûr que ce soit l'idéal ...
Mais le faire avec un seul appel à localtime et un traitement ensuite, c'est plus efficace.
Traitement court :
Code:
1 2 3 4
| my (undef, undef, undef, $jour, $mois, $annee) = localtime(time);
my $printdate = (1900 + $annee) . (1 + $mois) . $jour;
print "$printdate\n"; |
Traitement long (en utilisant des tranches de hachages pour donner une indexation façon "structures" au tableau de résultats avec deux lignes de "préparation/déclaration") :
Code:
1 2 3 4 5 6 7
| my @lt_fields = qw (sec min hour mday mon year wday yday isdst);
my %ma_date;
@ma_date{@lt_fields} = localtime(time);
my $printdate = (1900 + $ma_date{year}) . (1 + $ma_date{mon}) . $ma_date{mday};
print "$printdate\n"; |