OVH Cloud OVH Cloud

conversion de format de date

3 réponses
Avatar
nicholls
Bonjour,
Je recupere un date au format suivant : 2004-04-07 18:12:38 et
j'aimerais la convertir en timestamp (nb sec ecoulé depuis 1970).
J'ai vu qu'il existe plein de fonction comme timelocal mais je
n'arrive pas a sortir qq chose de correct (le nb de sec ne correspond
pas).

Est ce que qq peut m'aider.
Merci d'avance.

3 réponses

Avatar
Paul GABORIT
À (at) 7 Apr 2004 08:49:31 -0700,
(nicholls) écrivait (wrote):
Je recupere un date au format suivant : 2004-04-07 18:12:38 et
j'aimerais la convertir en timestamp (nb sec ecoulé depuis 1970).
J'ai vu qu'il existe plein de fonction comme timelocal mais je
n'arrive pas a sortir qq chose de correct (le nb de sec ne correspond
pas).


Je suppose que c'est une date au format ISO (YYYY-MM-DD HH:mm:ss) et non pas à
l'anglaise (avec le mois et le quantième du mois inversé). Je suppose aussi
que c'est une heure locale (correspondant à la timezone de la machine qui
effectue la conversion). Je suppose en plus que les heures, les minutes et les
secondes sont toujours sur deux chiffres.

Dans ce cas, on peut faire :

use Time::Local; # a installer

my $date = "2004-04-07 18:12:38";

if ($date =~ m/^(d{4})-(dd)-(dd) (dd):(dd):(dd)$/) {
my ($YY, $MM, $DD, $HH, $mm, $ss) = ($1, $2, $3, $4, $5, $6);

my $time = timelocal($ss, $mm, $HH, $DD, $MM - 1, $YY);

# pour verifier
print scalar(localtime($time)), "n";
} else {
warn "Date bizarre : '$date'n";
}

Pour obtenir le nombre de secondes écoulées depuis le 1 janvier 1970 à minuit
de manière portable, il faut en plus tester l'origine des temps qui n'est pas
la même sur tous les OS (cf. perldoc -f time).

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

Avatar
nicholls
bonjour,

Ca marche parfaitement, je crois que ce qui n'alais pas c'est qu'il
faut soustraire 1 au mois (pourquoi ?).

Merci.



Paul GABORIT wrote in message news:...
À (at) 7 Apr 2004 08:49:31 -0700,
(nicholls) écrivait (wrote):
Je recupere un date au format suivant : 2004-04-07 18:12:38 et
j'aimerais la convertir en timestamp (nb sec ecoulé depuis 1970).
J'ai vu qu'il existe plein de fonction comme timelocal mais je
n'arrive pas a sortir qq chose de correct (le nb de sec ne correspond
pas).


Je suppose que c'est une date au format ISO (YYYY-MM-DD HH:mm:ss) et non pas à
l'anglaise (avec le mois et le quantième du mois inversé). Je suppose aussi
que c'est une heure locale (correspondant à la timezone de la machine qui
effectue la conversion). Je suppose en plus que les heures, les minutes et les
secondes sont toujours sur deux chiffres.

Dans ce cas, on peut faire :

use Time::Local; # a installer

my $date = "2004-04-07 18:12:38";

if ($date =~ m/^(d{4})-(dd)-(dd) (dd):(dd):(dd)$/) {
my ($YY, $MM, $DD, $HH, $mm, $ss) = ($1, $2, $3, $4, $5, $6);

my $time = timelocal($ss, $mm, $HH, $DD, $MM - 1, $YY);

# pour verifier
print scalar(localtime($time)), "n";
} else {
warn "Date bizarre : '$date'n";
}

Pour obtenir le nombre de secondes écoulées depuis le 1 janvier 1970 à minuit
de manière portable, il faut en plus tester l'origine des temps qui n'est pas
la même sur tous les OS (cf. perldoc -f time).



Avatar
Paul GABORIT
À (at) 8 Apr 2004 00:27:19 -0700,
(nicholls) écrivait (wrote):
Ca marche parfaitement, je crois que ce qui n'alais pas c'est qu'il
faut soustraire 1 au mois (pourquoi ?).


Pourquoi pas ? Les conventions humaines sont rarement celles adoptées par les
machines ;-)

Peut-être pour faciliter la recherche du nom du mois dans un tableau (indicé de
0 à 11)...

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