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 time
Prova 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 Sat
Se 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 2013
GMT 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 2013
Formato 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:52
Epoch 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 2018
Funzione 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/YY Data breve , equivalente a%m/%d/%y |
08/23/01 |
%e |
Giorno del mese, spazio riempito ( 1-31 ) |
23 |
%F |
YYYY-MM-DD Data 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