Perl ha una comoda funzione integrata per trovare la data e l'ora correnti nei tuoi script. Tuttavia, quando parliamo di trovare il tempo, stiamo parlando del tempo che è attualmente impostato sulla macchina che esegue lo script. Ad esempio, se stai eseguendo il tuo script Perl sul tuo computer locale, il tempo locale restituirà l'ora corrente che hai impostato e presumibilmente impostato sul fuso orario corrente.
Quando si esegue lo stesso script su un server Web, è possibile che il tempo locale sia disattivato dal tempo locale sul sistema desktop. Il server potrebbe trovarsi in un fuso orario diverso o essere impostato in modo errato. Ogni macchina potrebbe avere un'idea totalmente diversa di cosa sia il tempo locale e potrebbe essere necessario un po 'di adattamento, sia all'interno dello script che sul server stesso, per farlo corrispondere a ciò che ti aspetti.
La funzione localtime restituisce un elenco pieno di dati sull'ora corrente, alcuni dei quali dovranno essere modificati. Esegui il programma in basso e vedrai ogni elemento nell'elenco stampato sulla linea e separato da spazi.
#! / Usr / local / bin / perl
@timeData = localtime (ora);
print join (", @timeData);
Dovresti vedere qualcosa di simile a questo, anche se il numero potrebbe essere molto diverso.
20 36 8 27 11 105 2 360 0
Questi elementi dell'ora corrente sono, in ordine:
Quindi, se torniamo all'esempio e proviamo a leggerlo, vedrai che sono le 8:36:20 del 27 dicembre 2005, sono 2 giorni la domenica (martedì) e sono 360 giorni dall'inizio del anno. L'ora legale non è attiva.
Alcuni degli elementi dell'array restituiti da localtime sono un po 'scomodi da leggere. Chi penserebbe all'anno in corso in termini di numero degli anni passati 1900? Diamo un'occhiata a un esempio che rende la nostra data e ora più chiare.
#! / Usr / local / bin / perl
@months = qw (gen feb mar apr mag giu lug ago set ott nov dic);
@weekDays = qw (dom lun mar mer gio ven sab dom);
($ second, $ minute, $ hour, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();
$ anno = 1900 + $ annoOffset;
$ theTime = "$ hour: $ minute: $ second, $ weekDays [$ dayOfWeek] $ months [$ month] $ dayOfMonth, $ year";
stampa $ theTime;
Quando esegui il programma, dovresti vedere una data e un'ora molto più leggibili come questa:
9:14:42, mer 28 dic 2005
Quindi cosa abbiamo fatto per creare questa versione più leggibile? Innanzitutto, prepariamo due array con i nomi dei mesi e dei giorni della settimana.
@months = qw (gen feb mar apr mag giu lug ago set ott nov dic);
@weekDays = qw (dom lun mar mer gio ven sab dom);
Poiché la funzione localtime restituisce questi elementi in valori compresi rispettivamente tra 0-11 e 0-6, sono candidati perfetti per un array. Il valore restituito da localtime può essere utilizzato come indirizzo numerico per accedere all'elemento corretto nell'array.