Perl - Date et heure

Ce chapitre vous donnera les notions de base sur la manière de traiter et de manipuler les dates et heures en Perl.

Date et heure actuelles

Commençons avec localtime(), qui renvoie les valeurs de la date et de l'heure actuelles si aucun argument n'est fourni. Voici la liste de 9 éléments renvoyée par lelocaltime fonction lors de l'utilisation dans un contexte de liste -

sec,     # seconds of minutes from 0 to 61
min,     # minutes of hour from 0 to 59
hour,    # hours of day from 0 to 24
mday,    # day of month from 1 to 31
mon,     # month of year from 0 to 11
year,    # year since 1900
wday,    # days since sunday
yday,    # days since January 1st
isdst    # hours of daylight savings time

Essayez l'exemple suivant pour imprimer différents éléments renvoyés par la fonction localtime () -

#!/usr/local/bin/perl
 
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

16 Feb Sat

Si vous utilisez la fonction localtime () dans un contexte scalaire, elle renverra la date et l'heure à partir du fuseau horaire actuel défini dans le système. Essayez l'exemple suivant pour imprimer la date et l'heure actuelles au format complet -

#!/usr/local/bin/perl
 
$datestring = localtime();
print "Local date and time $datestring\n";

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Local date and time Sat Feb 16 06:50:45 2013

Heure GMT

La fonction gmtime()fonctionne comme la fonction localtime () mais les valeurs renvoyées sont localisées pour le fuseau horaire standard de Greenwich. Lorsqu'il est appelé dans un contexte de liste, $ isdst, la dernière valeur renvoyée par gmtime, est toujours 0. Il n'y a pas d'heure d'été en GMT.

Vous devriez noter le fait que localtime () retournera l'heure locale actuelle sur la machine qui exécute le script et gmtime () renverra l'heure universelle de Greenwich, ou GMT (ou UTC).

Essayez l'exemple suivant pour imprimer la date et l'heure actuelles mais à l'échelle GMT -

#!/usr/local/bin/perl

$datestring = gmtime();
print "GMT date and time $datestring\n";

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

GMT date and time Sat Feb 16 13:50:45 2013

Format de la date et de l'heure

Vous pouvez utiliser la fonction localtime () pour obtenir une liste de 9 éléments et plus tard, vous pouvez utiliser le printf() fonction pour formater la date et l'heure en fonction de vos besoins comme suit -

#!/usr/local/bin/perl
 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();

printf("Time Format - HH:MM:SS\n");
printf("%02d:%02d:%02d", $hour, $min, $sec);

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Time Format - HH:MM:SS
06:58:52

Heure de l'époque

Vous pouvez utiliser la fonction time () pour obtenir l'heure de l'époque, c'est-à-dire le nombre de secondes qui se sont écoulées depuis une date donnée, sous Unix est le 1er janvier 1970.

#!/usr/local/bin/perl
 
$epoc = time();

print "Number of seconds since Jan 1, 1970 - $epoc\n";

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Number of seconds since Jan 1, 1970 - 1361022130

Vous pouvez convertir un nombre donné de secondes en chaîne de date et d'heure comme suit -

#!/usr/local/bin/perl

$datestring = localtime();
print "Current date and time $datestring\n";

$epoc = time();
$epoc = $epoc - 24 * 60 * 60;   # one day before of current date.

$datestring = localtime($epoc);
print "Yesterday's date and time $datestring\n";

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

Current date and time Tue Jun  5 05:54:43 2018
Yesterday's date and time Mon Jun  4 05:54:43 2018

Fonction POSIX strftime ()

Vous pouvez utiliser la fonction POSIX strftime()pour formater la date et l'heure à l'aide du tableau suivant. Veuillez noter que les spécificateurs marqués d'un astérisque (*) dépendent des paramètres régionaux.

Prescripteur Remplacé par Exemple
%a Nom abrégé du jour de la semaine * Thu
%A Nom complet du jour de la semaine * Thursday
%b Nom abrégé du mois * Aug
%B Nom complet du mois * August
%c Représentation de la date et de l'heure * Thu Aug 23 14:55:02 2001
%C Année divisée par 100 et tronquée en entier ( 00-99) 20
%d Jour du mois, sans remplissage ( 01-31) 23
%D MM/DD/YYDate courte , équivalente à%m/%d/%y 08/23/01
%e Jour du mois, rembourré d'espace ( 1-31) 23
%F YYYY-MM-DDDate courte , équivalente à%Y-%m-%d 2001-08-23
%g Année basée sur la semaine, deux derniers chiffres ( 00-99) 01
%G Année basée sur la semaine 2001
%h Nom du mois abrégé * (identique à %b) Aug
%H Heure au format 24h ( 00-23) 14
%I Heure au format 12h ( 01-12) 02
%j Jour de l'année ( 001-366) 235
%m Mois sous forme de nombre décimal ( 01-12) 08
%M Minute ( 00-59) 55
%n Caractère de nouvelle ligne ( '\n')
%p Désignation AM ou PM PM
%r Horloge de 12 heures * 02:55:02 pm
%R 24 heures HH:MM, équivalent à%H:%M 14:55
%S Deuxième ( 00-61) 02
%t Caractère de tabulation horizontale ( '\t')
%T Format d'heure ISO 8601 ( HH:MM:SS), équivalent à%H:%M:%S 14:55
%u Jour de la semaine ISO 8601 comme nombre avec lundi comme 1( 1-7) 4
%U Numéro de semaine avec le premier dimanche comme premier jour de la première semaine ( 00-53) 33
%V Numéro de semaine ISO 8601 ( 00-53) 34
%w Jour de la semaine sous forme de nombre décimal avec dimanche sous forme de 0( 0-6) 4
%W Numéro de la semaine avec le premier lundi comme premier jour de la première semaine ( 00-53) 34
%x Représentation de la date * 08/23/01
%X Représentation du temps * 14:55:02
%y Année, deux derniers chiffres ( 00-99) 01
%Y An 2001
%z

Décalage ISO 8601 par rapport à UTC dans le fuseau horaire (1 minute = 1, 1 heure = 100)

Si le fuseau horaire ne peut pas être défini, aucun caractère

+100
%Z

Nom ou abréviation du fuseau horaire *

Si le fuseau horaire ne peut pas être défini, aucun caractère

CDT
%% Un %signe %

Vérifions l'exemple suivant pour comprendre l'utilisation -

#!/usr/local/bin/perl
use POSIX qw(strftime);

$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime;
printf("date and time - $datestring\n");

# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime;
printf("date and time - $datestring\n");

Lorsque le code ci-dessus est exécuté, il produit le résultat suivant -

date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013