Perl: data e ora
Questo capitolo vi darà la comprensione di base su come elaborare e manipolare date e orari in Perl.
Data e ora correnti
Iniziamo con localtime()funzione, che restituisce valori per la data e l'ora correnti se non vengono forniti argomenti. Di seguito è riportato l'elenco di 9 elementi restituito dalocaltime funzione durante l'utilizzo nel contesto della lista -
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 timeProva il seguente esempio per stampare diversi elementi restituiti dalla funzione 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";Quando il codice sopra viene eseguito, produce il seguente risultato:
16 Feb SatSe utilizzerai la funzione localtime () in un contesto scalare, restituirà la data e l'ora dal fuso orario corrente impostato nel sistema. Prova il seguente esempio per stampare la data e l'ora correnti nel formato completo:
#!/usr/local/bin/perl
 
$datestring = localtime();
print "Local date and time $datestring\n";Quando il codice sopra viene eseguito, produce il seguente risultato:
Local date and time Sat Feb 16 06:50:45 2013GMT Time
La funzione gmtime()funziona esattamente come la funzione localtime () ma i valori restituiti sono localizzati per il fuso orario standard di Greenwich. Quando viene chiamato nel contesto di una lista, $ isdst, l'ultimo valore restituito da gmtime, è sempre 0. Non c'è l'ora legale in GMT.
Si dovrebbe prendere nota del fatto che localtime () restituirà l'ora locale corrente sulla macchina che esegue lo script e gmtime () restituirà l'ora universale di Greenwich, o GMT (o UTC).
Prova il seguente esempio per stampare la data e l'ora correnti ma sulla scala GMT -
#!/usr/local/bin/perl
$datestring = gmtime();
print "GMT date and time $datestring\n";Quando il codice sopra viene eseguito, produce il seguente risultato:
GMT date and time Sat Feb 16 13:50:45 2013Formato data e ora
Puoi usare la funzione localtime () per ottenere un elenco di 9 elementi e in seguito puoi usare il printf() funzione per formattare la data e l'ora in base alle proprie esigenze come segue:
#!/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);Quando il codice sopra viene eseguito, produce il seguente risultato:
Time Format - HH:MM:SS
06:58:52Epoch time
È possibile utilizzare la funzione time () per ottenere l'ora dell'epoca, ovvero il numero di secondi trascorsi da una determinata data, in Unix è il 1 gennaio 1970.
#!/usr/local/bin/perl
 
$epoc = time();
print "Number of seconds since Jan 1, 1970 - $epoc\n";Quando il codice sopra viene eseguito, produce il seguente risultato:
Number of seconds since Jan 1, 1970 - 1361022130È possibile convertire un determinato numero di secondi in una stringa di data e ora come segue:
#!/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";Quando il codice sopra viene eseguito, produce il seguente risultato:
Current date and time Tue Jun  5 05:54:43 2018
Yesterday's date and time Mon Jun  4 05:54:43 2018Funzione POSIX strftime ()
È possibile utilizzare la funzione POSIX strftime()per formattare la data e l'ora con l'aiuto della tabella seguente. Si noti che gli specificatori contrassegnati da un asterisco (*) dipendono dalla lingua.
| Specifier | Sostituito da | Esempio | 
|---|---|---|
| %a | Nome abbreviato del giorno della settimana * | Thu | 
| %A | Nome completo del giorno della settimana * | Thursday | 
| %b | Nome del mese abbreviato * | Aug | 
| %B | Nome completo del mese * | August | 
| %c | Rappresentazione di data e ora * | Thu Aug 23 14:55:02 2001 | 
| %C | Anno diviso per 100 e troncato a intero ( 00-99) | 20 | 
| %d | Giorno del mese, con riempimento zero ( 01-31) | 23 | 
| %D | MM/DD/YYData breve , equivalente a%m/%d/%y | 08/23/01 | 
| %e | Giorno del mese, spazio riempito ( 1-31) | 23 | 
| %F | YYYY-MM-DDData breve , equivalente a%Y-%m-%d | 2001-08-23 | 
| %g | Anno basato sulla settimana, ultime due cifre ( 00-99) | 01 | 
| %G | Anno su base settimanale | 2001 | 
| %h | Nome del mese abbreviato * (uguale a %b) | Aug | 
| %H | Ora in formato 24 ore ( 00-23) | 14 | 
| %I | Ora in formato 12 ore ( 01-12) | 02 | 
| %j | Giorno dell'anno ( 001-366) | 235 | 
| %m | Mese come numero decimale ( 01-12) | 08 | 
| %M | Minuto ( 00-59) | 55 | 
| %n | Carattere di nuova riga ( '\n') | |
| %p | Designazione AM o PM | PM | 
| %r | 12 ore dell'orologio * | 02:55:02 pm | 
| %R | 24 ore HH:MM, equivalente a%H:%M | 14:55 | 
| %S | Secondo ( 00-61) | 02 | 
| %t | Carattere di tabulazione orizzontale ( '\t') | |
| %T | Formato ora ISO 8601 ( HH:MM:SS), equivalente a%H:%M:%S | 14:55 | 
| %u | ISO 8601 giorno della settimana come numero con lunedì come 1(1-7) | 4 | 
| %U | Numero della settimana con la prima domenica come primo giorno della prima settimana ( 00-53) | 33 | 
| %V | Numero settimana ISO 8601 ( 00-53) | 34 | 
| %w | Giorno della settimana come numero decimale con domenica come 0(0-6) | 4 | 
| %W | Numero della settimana con il primo lunedì come primo giorno della prima settimana ( 00-53) | 34 | 
| %x | Rappresentazione della data * | 08/23/01 | 
| %X | Rappresentazione del tempo * | 14:55:02 | 
| %y | Anno, ultime due cifre ( 00-99) | 01 | 
| %Y | Anno | 2001 | 
| %z | Differenza ISO 8601 dall'UTC nel fuso orario (1 minuto = 1, 1 ora = 100) Se non è possibile terminare il fuso orario, nessun carattere | +100 | 
| %Z | Nome o abbreviazione del fuso orario * Se non è possibile terminare il fuso orario, nessun carattere | CDT | 
| %% | Un %segno | % | 
Controlliamo il seguente esempio per capire l'utilizzo:
#!/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");Quando il codice sopra viene eseguito, produce il seguente risultato:
date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013