Perl a une fonction intégrée pratique pour trouver la date et l'heure actuelles dans vos scripts. Cependant, lorsque nous parlons de trouver l'heure, nous parlons de l'heure actuellement définie sur la machine qui exécute le script. Par exemple, si vous exécutez votre script Perl sur votre machine locale, l'heure locale renverra l'heure actuelle que vous avez définie et vraisemblablement définie sur votre fuseau horaire actuel.
Lorsque vous exécutez le même script sur un serveur Web, vous pouvez constater que l'heure locale est hors de l'heure locale sur votre système de bureau. Le serveur peut se trouver dans un fuseau horaire différent ou être configuré de manière incorrecte. Chaque machine peut avoir une idée totalement différente de ce qu'est l'heure locale et cela peut prendre un certain ajustement, soit dans le script, soit sur le serveur lui-même, pour l'adapter à ce que vous attendez.
La fonction heure locale renvoie une liste complète de données sur l'heure actuelle, dont certaines devront être ajustées. Exécutez le programme ci-dessous et vous verrez chaque élément de la liste imprimé sur la ligne et séparé par des espaces.
#! / usr / local / bin / perl
@timeData = heure locale (heure);
print join ('', @timeData);
Vous devriez voir quelque chose de similaire à cela, bien que le nombre puisse être très différent.
20 36 8 27 11 105 2 360 0
Ces éléments de l'heure actuelle sont, dans l'ordre:
- Secondes après la minute
- Minutes après l'heure
- Heures après minuit
- Jour du mois
- Mois après le début de l'année
- Nombre d'années depuis 1900
- Nombre de jours depuis le début de la semaine (dimanche)
- Nombre de jours depuis le début de l'année
- Que ce soit ou non l'heure d'été c'est actif
Donc, si nous revenons à l'exemple et essayons de le lire, vous verrez qu'il est 8 h 36 min 20 s le 27 décembre 2005, il est 2 jours après dimanche (mardi) et 360 jours depuis le début de la année. L'heure d'été n'est pas active.
Rendre le Perl Localtime lisible
Certains des éléments du tableau renvoyés par l'heure locale sont un peu difficiles à lire. Qui penserait de l'année en cours en termes de nombre d'années après 1900? Jetons un coup d'œil à un exemple qui rend notre date et notre heure plus claires.
#! / usr / local / bin / perl
@months = qw (janvier févr mars avril mai juin juil août sept oct oct nov déc);
@weekDays = qw (dim lun mar mar jeu ven ven sam dim);
($ seconde, $ minute, $ heure, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();
$ year = 1900 + $ yearOffset;
$ theTime = "$ hour: $ minute: $ second, $ weekDays [$ dayOfWeek] $ mois [$ month] $ dayOfMonth, $ year";
imprimer $ theTime;
Lorsque vous exécutez le programme, vous devriez voir une date et une heure beaucoup plus lisibles comme celle-ci:
9:14:42, mer 28 déc.2005
Alors, qu'avons-nous fait pour créer cette version plus lisible? Tout d'abord, nous préparons deux tableaux avec les noms des mois et des jours de la semaine.
@months = qw (janvier févr mars avril mai juin juil août sept oct oct nov déc);
@weekDays = qw (dim lun mar mar jeu ven ven sam dim);
Étant donné que la fonction d'heure locale renvoie ces éléments dans des valeurs allant respectivement de 0-11 et 0-6, ils sont des candidats parfaits pour un tableau. La valeur renvoyée par localtime peut être utilisée comme adresse numérique pour accéder à l'élément correct dans le tableau.
$ months [$ month] $ weekDays [$ dayOfWeek]
L'étape suivante consiste à obtenir toutes les valeurs de la fonction heure locale. Dans cet exemple, nous utilisons un raccourci Perl pour placer automatiquement chaque élément du tableau localtime dans sa propre variable. Nous avons choisi des noms pour qu'il soit facile de se rappeler quel élément est lequel.
($ seconde, $ minute, $ heure, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();
Nous devons également ajuster la valeur de l'année. N'oubliez pas que l'heure locale renvoie le nombre d'années depuis 1900. Par conséquent, pour trouver l'année en cours, nous devons ajouter 1900 à la valeur qui nous est donnée.
$ year = 1900 + $ yearOffset;
Comment dire l'heure GM actuelle en Perl
Supposons que vous souhaitiez éviter toutes les confusions de fuseau horaire possibles et prendre vous-même le contrôle du décalage. L'obtention de l'heure actuelle en heure locale renvoie toujours une valeur basée sur les paramètres de fuseau horaire de la machine - un serveur dans les États-Unis reviendront une fois, tandis qu'un serveur en Australie en renverra une presque toute une journée différente en raison du fuseau horaire différences.
Perl a une deuxième fonction de chronométrage pratique qui fonctionne exactement de la même manière que l'heure locale, mais au lieu de renvoyer l'heure fixée pour votre machine fuseau horaire, il revient Temps universel coordonné (abrégé en UTC, également appelé Greenwich Mean Time ou GMT). Assez simplement, la fonction est appelée gmtime.
#! / usr / local / bin / perl
@timeData = gmtime (time);
print join ('', @timeData);
Outre le fait que l'heure renvoyée sera la même sur chaque machine et en GMT, il n'y a pas de différence entre les fonctions gmtime et localtime. Toutes les données et conversions se font de la même manière.
#! / usr / local / bin / perl
@months = qw (janvier févr mars avril mai juin juil août sept oct oct nov déc);
@weekDays = qw (dim lun mar mar jeu ven ven sam dim);
($ seconde, $ minute, $ heure, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = gmtime ();
$ year = 1900 + $ yearOffset;
$ theGMTime = "$ hour: $ minute: $ second, $ weekDays [$ dayOfWeek] $ mois [$ month] $ dayOfMonth, $ year";
imprimer $ theGMTime;
- localtime renverra l'heure locale actuelle sur la machine qui exécute le script.
- gmtime renverra l'heure universelle de Greenwich, ou GMT (ou UTC).
- Les valeurs de retour peuvent ne pas être tout à fait ce que vous attendez, alors assurez-vous de les convertir si nécessaire.