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 tuo 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 completamente diversa di che cosa è il tempo locale e potrebbe essere necessario un po 'di adattamento, sia all'interno dello script che sul server stesso, per farlo corrispondere a quello 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:
- Pochi secondi dopo
- Minuti dopo l'ora
- Ore passate a mezzanotte
- Giorno del mese
- Mesi all'inizio dell'anno
- Numero di anni dal 1900
- Numero di giorni dall'inizio della settimana (domenica)
- Numero di giorni dall'inizio dell'anno
- Se o no ora legale è attivo
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.
Rendere leggibile il Perl Localtime
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.
$ months [$ month] $ weekDays [$ dayOfWeek]
Il prossimo passo è ottenere tutti i valori dalla funzione localtime. In questo esempio, stiamo usando un collegamento Perl per posizionare automaticamente ogni elemento dell'array localtime nella sua variabile. Abbiamo scelto i nomi in modo che sia facile ricordare quale elemento è quale.
($ second, $ minute, $ hour, $ dayOfMonth, $ month, $ yearOffset, $ dayOfWeek, $ dayOfYear, $ daylightSavings) = localtime ();
Dobbiamo anche regolare il valore dell'anno. Ricorda che il localtime restituisce il numero di anni dal 1900, quindi per trovare l'anno in corso, dovremo aggiungere 1900 al valore che ci viene dato.
$ anno = 1900 + $ annoOffset;
Come dire l'ora corrente GM in Perl
Supponiamo che tu voglia evitare tutte le possibili confusioni del fuso orario e assumere tu stesso il controllo dell'offset. Ottenere l'ora corrente in ora locale restituirà sempre un valore basato sulle impostazioni del fuso orario della macchina: un server in gli Stati Uniti torneranno una volta, mentre un server in Australia restituirà quasi un giorno intero diverso a causa del fuso orario differenze.
Perl ha una seconda utile funzione di indicazione del tempo che funziona esattamente allo stesso modo dell'ora locale, ma invece di restituire il tempo fissato per la macchina fuso orario, ritorna Tempo universale coordinato (abbreviato come UTC, chiamato anche Greenwich Mean Time o GMT). Abbastanza semplicemente la funzione è chiamata gmtime.
#! / Usr / local / bin / perl
@timeData = gmtime (time);
print join ('', @timeData);
A parte il fatto che il tempo di ritorno sarà lo stesso su ogni macchina e in GMT, non c'è differenza tra le funzioni gmtime e localtime. Tutti i dati e le conversioni vengono eseguiti allo stesso modo.
#! / 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) = gmtime ();
$ anno = 1900 + $ annoOffset;
$ theGMTime = "$ hour: $ minute: $ second, $ weekDays [$ dayOfWeek] $ months [$ month] $ dayOfMonth, $ year";
stampa $ theGMTime;
- localtime restituirà l'ora locale corrente sulla macchina che esegue lo script.
- gmtime restituirà il tempo medio universale di Greenwich o GMT (o UTC).
- I valori restituiti potrebbero non essere esattamente quelli previsti, quindi assicurati di convertirli se necessario.