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/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