OVH Cloud OVH Cloud

les dates !!

2 réponses
Avatar
kurtz_le_pirate
bonjour,

je suis un peu perdu dans toutes ces dates et fonctions associées.
voilà ce que je fais :
...
my $fileATime = gmctime($fileInfos->atime);
print "$name - ".dateFormat($fileATime)."\n"
...
...
sub dateFormat {
my @vals=split (/ /,shift);
return $vals[2]."/".$vals[1]."/".$vals[4]."-".$vals[3];
}

$fileATime contient 'Fri Apr 14 00:55:58 2006'
ma procédure retourne '14/Apr/2006-00:55:58'
c'est déjà un peu mieux mais je voudrais avoir '04' et pas 'Apr'
et là je ne vois pas comment faire. (non, je vais pas faite un hash
avec le nom du mois en clé :))) )


je suis peut être parti sur une mauvaise voie ?
merci de votre aide.

2 réponses

Avatar
Paul Gaborit
À (at) Fri, 14 Apr 2006 15:38:27 +0200,
"kurtz_le_pirate" écrivait (wrote):
je suis un peu perdu dans toutes ces dates et fonctions associées.
voilà ce que je fais :
...
my $fileATime = gmctime($fileInfos->atime);


gmctime ? C'est une fonction perso ? Ou une faute de frappe (gmtime) ?

Il vaut mieux recopier du code (ça m'arrive de ne pas le faire mais
« faites ce que je dis pas ce que je fais ! »).

print "$name - ".dateFormat($fileATime)."n"
...
...
sub dateFormat {
my @vals=split (/ /,shift);
return $vals[2]."/".$vals[1]."/".$vals[4]."-".$vals[3];
}

$fileATime contient 'Fri Apr 14 00:55:58 2006'
ma procédure retourne '14/Apr/2006-00:55:58'
c'est déjà un peu mieux mais je voudrais avoir '04' et pas 'Apr'
et là je ne vois pas comment faire. (non, je vais pas faite un hash
avec le nom du mois en clé :))) )


Tout est dans le contexte : ici, contexte scalaire alors qu'il
vaudrait mieux contexte de liste. Une fonction peut retourner un
résultat différent selon qu'on l'appelle pour récupérer une valeur
scalaire ou une liste de valeurs. C'est le cas de gmtime :

my ($sec, $min, $hour, $mday, $mon, $year) = gmtime($fileInfos->atime;

Les deux dernières valeurs de la liste retournée par gmtime (le jour
de la semaine et le jour dans l'année) seront perdues mais il me
semble qu'elles ne vous interessaient pas.

Le mois (compté à partir de 0) et l'année (comptée à partir de 1900)
doivent être corrigée :

$mon += 1;
$year += 1900;

Ensuite :

print sprintf("%s - %02d/%02d/%d-%02d:%02d:%02d",
$name, $mday, $mon, $year, $hour, $min, $sec),
"n";

Le 'sprintf' et son format avec des %02d permet de garantir qu'on
obtient bien '01/02/2006-00:01:01' au lieu de '1/2/2006-0:1:1'.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
kurtz le pirate
In article ,
Paul Gaborit wrote:

À (at) Fri, 14 Apr 2006 15:38:27 +0200,
"kurtz_le_pirate" écrivait (wrote):
je suis un peu perdu dans toutes ces dates et fonctions associées.
voilà ce que je fais :
...
my $fileATime = gmctime($fileInfos->atime);


gmctime ? C'est une fonction perso ? Ou une faute de frappe (gmtime) ?


...heuuu non, non, c'est bien 'gmctime' du module 'use Time::gmtime'.

-> The gmctime() function provides a way of getting at the scalar sense
of the original CORE::gmtime() function.
$date_string = gmctime(stat($file)->mtime);


Il vaut mieux recopier du code (ça m'arrive de ne pas le faire mais
« faites ce que je dis pas ce que je fais ! »).


et c'est bien se que j'ai fais :))


print "$name - ".dateFormat($fileATime)."n"
...
...
sub dateFormat {
my @vals=split (/ /,shift);
return $vals[2]."/".$vals[1]."/".$vals[4]."-".$vals[3];
}

$fileATime contient 'Fri Apr 14 00:55:58 2006'
ma procédure retourne '14/Apr/2006-00:55:58'
c'est déjà un peu mieux mais je voudrais avoir '04' et pas 'Apr'
et là je ne vois pas comment faire. (non, je vais pas faite un hash
avec le nom du mois en clé :))) )


Tout est dans le contexte : ici, contexte scalaire alors qu'il
vaudrait mieux contexte de liste. Une fonction peut retourner un
résultat différent selon qu'on l'appelle pour récupérer une valeur
scalaire ou une liste de valeurs. C'est le cas de gmtime :

my ($sec, $min, $hour, $mday, $mon, $year) = gmtime($fileInfos->atime;

Les deux dernières valeurs de la liste retournée par gmtime (le jour
de la semaine et le jour dans l'année) seront perdues mais il me
semble qu'elles ne vous interessaient pas.


effectivement gmtime() est bien plus adpaté à mon besoin.


Le mois (compté à partir de 0) et l'année (comptée à partir de 1900)
doivent être corrigée :

$mon += 1;
$year += 1900;

Ensuite :

print sprintf("%s - %02d/%02d/%d-%02d:%02d:%02d",
$name, $mday, $mon, $year, $hour, $min, $sec),
"n";

Le 'sprintf' et son format avec des %02d permet de garantir qu'on
obtient bien '01/02/2006-00:01:01' au lieu de '1/2/2006-0:1:1'.


merci beaucoup

--
klp