Localtime Come dire l'ora corrente in Perl

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:

  • 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 è attiva o meno l'ora legale

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.