SELFHTML/Aides à la navigation CGI/Perl Fonctions Perl |
Fonctions pour les date et heure |
|
Généralités sur ces fonctions |
|
La fonction de base pour le calcul du temps sous Perl est time. Elle recherche le moment actuel et cela en secondes qui se sont écoulées depuis le "bang" Unix logique, le 1/1/1970, à 0.00 heures. Avec ce chiffre, il est possible d'alimenter une des fonctions localtime ou gmtime pour recevoir les différent éléments de la date et de l'heure du moment présent, donc par exemple le jour, le mois l'année ou bien la partie heures et la partie minutes de l'heure.
Le module standard Time::Local
est lui aussi digne d'intérêt. Vous y trouverez les fonctions inverses à celles qui sont présentées ici localtime et gmtime.
Fonctionne exactement comme localtime, à la différence près que ce n'est pas l'heure de l'ordinateur qui est trouvée mais celle du méridien de Greenwich (méridien zéro).
Recherche pour un moment précis les différentes mentions de temps.
Attend comme paramètre:
1. le nombre de secondes écoulées à partir du 1/1/1970, jusqu'au moment précis désiré. Pour rechercher les données pour l'instant présent, ne rien transmettre ou simplement time
.
Renvoie au choix une liste qui comprend 9 éléments dans lesquels les différentes données sont sauvegardées ou bien une chaîne de caractères conforme à la fonction C ctime
, qui fait partie du standard ANSI.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); my ($secondes, $minutes, $heures, $jour_mois, $mois, $an, $jour_semaine, $jour_calendaire, $heure_ete) = localtime(time); my $CTIME_String = localtime(time); $mois+=1; $jour_calendaire+=1; $mois = $mois < 10 ? $mois = "0".$mois : $mois; $jour_mois = $jour_mois < 10 ? $jour_mois = "0".$jour_mois : $jour_mois; $heures = $heures < 10 ? $heures = "0".$heures : $heures; $minutes = $minutes < 10 ? $minutes = "0".$minutes : $minutes; $secondes = $secondes < 10 ? $secondes = "0".$secondes : $secondes; $an+=1900; my @noms_de_jours = ("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"); my @noms_de_mois = ("","Janvier","Février","Mars","Avril","Mai","Juin", "Juillet","Août","Septembre","Octobre","Novembre","Décembre"); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Sortie du test</title></head><body>\n"; print "Datum (Variante 1): $noms_de_jours[$jour_semaine], le $jour_mois.$mois.$an<br>\n"; print "Datum (Variante 2): $noms_de_jours[$jour_semaine], le $jour_mois. $noms_de_mois[$mois] $an<br>\n"; print "heure (Variante 1): $heures.$minutes Uhr<br>\n"; print "heure (Variante 2): $heures.$minutes:$secondes Uhr<br>\n"; print "Aujourd'hui nous sommes le $jour_calendaireème jour de l'année<br>\n"; print "La sortie CTIME de ces date et heure donne: $CTIME_String<br>\n"; $heure_ete ? print "est l'heure d'&eavute;té\n" : print "est l'heure normale (pas l'heure d'&eavute;té)\n"; print "</body></html>\n"; |
L'exemple recherche les mentions de temps des date et heure actuelles et cela une fois dans un contexte de liste (premier appel de localtime
), et une fois dans un contexte scalaire (deuxième appel). Ensuite, le script prépare les données trouvées pour la sortie. Car les valeurs renvoyées sont dans de nombreux cas plutôt des "données brutes", qui doivent encore être traitées pour une sortie correcte.
Les valeurs pour $mois
et $jour_calendaire
sont tout d'abord augmentées de 1, étant donné que le comptage commence à 0 en interne pour la valeur renvoyée, pour les mois les valeurs trouvées vont donc par exemple de 0 à 11 et non pas comme il est d'usage de 1 à 12.
Ensuite, certaines de mentions sont formatées de telle façon qu'elles commencent par 0 au cas où leur valeur est inférieure à 10. car une mention de l'heure comme 8.1
est bien sûr indésirable, mais la sortie doit être finalement 08.01
. On obtient cela à l'aide d'une Simple requête soit..., soit....
L'année est augmentée de 1900. La raison en est que la valeur renvoyée pour l'année est le nombre d'années depuis 1900. Pour l'année 2000 donc c'est donc 100 par exemple qui est renvoyé. En y ajoutant 1900, on arrive donc au nombre d'années effectif.
Les listes définies ensuite pour les jours de semaine et les noms de mois offrent la possibilité d'employer des désignations en langue française de la date pour une sortie ultérieure.
Le script en exemple envoie du code HTML au navigateur et sort les données trouvées. Ici le script peut se fier aux données après traitement.
Recherche le nombre de secondes qui se sont écoulées depuis le 1/1/1970 jusqu'au moment de l'appel.
N'attend aucun paramètre.
Renvoie le nombre de secondes.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); my $secondes = time(); my $heures = int($secondes / 3600); my $jours = int($secondes / (24 * 3600)); my $semaines = int($secondes / (7 * 24 * 3600)); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Sortie du test</title></head><body>\n"; print "depuis le 1/1/1970 à 0.00 heure se sont écoulées $secondes secondes.<br>\n"; print "Ce qui donne $heures heures, $jours jours et $semaines semaines.\n"; print "</body></html>\n"; |
L'exemple appelle time
et sauvegarde la valeur retournée par la fonction dans la scalaire $secondes
. Ensuite, le script calcule à partir du nombre de secondes, l'équivalent en heures, en jours et en semaines. Pour obtenir à chaque fois la partie avant la virgule des résultats présentant des décimales, la fonction int leur est appliquée. Pour le contrôle, le script envoie du code HTML au navigateur et sort les nombres trouvés.
Fonctions pour l'entrée et la sortie et la lecture et l'écriture de données | |
Fonctions pour le contrôle du script en cours | |
SELFHTML/Aides à la navigation CGI/Perl Fonctions Perl |
© 2001 Stefan Münz / © 2003 Traduction Serge François, 13405@free.fr
selfhtml@fr.selfhtml.org