localtime
Converte l'ora restituita dalla funzione time in una lista di 9 elementi,
con l'ora localizzata al fuso orario locale. è tipicamente usato
come segue:
# 0 1 2 3 4 5 6 7 8
($sec,$min,$ore,$giom,$mese,$anno,$gios,$gioa,$oraleg) =
localtime(time);
Tutti gli elementi della lista sono numerici, e derivano direttamente dalla
'struct tm' del C. $sec, $min e $ore sono i secondi, i minuti e le ore
dell'orario specificato.
$giom è il giorno del mese, e $mese è il mese stesso,
nell'intervallo 0..11, in cui 0 indica Gennaio e 11 Dicembre.
Ciò rende facile ottenere il nome di un mese da una lista:
my @abbr = qw( Gen Feb Mar Apr Mag Giu Lug Ago Set Ott Nov Dic );
print "$abbr[$mese] $giom";
# $mese=9, $giom=18 fornisce "Ott 18"
$anno è il numero di anni a partire dal 1900, non solo le ultime due cifre
dell'anno. Ciò significa che $anno è 123 nel 2023. Il modo corretto per
ottenere un anno a quattro cifre è semplicemente:
$anno += 1900;
Per ottenere le ultime due cifre dell'anno (ad esempio, '01' in 2001) fate:
$anno = sprintf("%02d", $anno % 100);
$gios è il giorno della settimana, con 0 che indica Domenica e 3 Mercoledì.
$gioa è il giorno dell'anno, nell'intervallo 0..364 (o <0..365> negli anni bisestili).
$oraleg assume valore vero se l'orario specificato cade durante l'ora legale,
valore falso altrimenti.
Se ESPR viene omessa, localtime() usa l'ora correte (localtime(time)).
In contesto scalare, localtime() restituisce il valore di ctime(3):
$stringa_diadesso = localtime; # es. "Thu Oct 13 04:54:34 1994"
Questo valore scalare non dipende dal locale ma è interno a Perl.
Per il GMT invece del tempo locale, utilizzate la funzione interna gmtime.
Consultate anche il modulo Time::Local (per riconvertire secondi, minuti, ore, ...
nel valore intero restituito da time()) e le funzioni strftime(3) e mktime(3) del modulo POSIX.
Per ottenere stringhe di data simili, ma dipendenti dal locale, impostate le
vostre variabili d'ambiente relative al locale in maniera appropriata
(consultate perllocale) e provate ad esempio:
use POSIX qw(strftime);
$stringa_diadesso = strftime "%a %b %e %H:%M:%S %Y", localtime;
# oppure per il GMT formattato in maniera appropriata per il vostro locale:
$stringa_diadesso = strftime "%a %b %e %H:%M:%S %Y", gmtime;
Va notato che gli escape %a e %b, che rappresentano la forma abbreviata
del giorno della settimana e del mese dell'anno, possono non essere
necessariamente lunghi tre caratteri.
Si consulti perlport/localtime per ciò che concerne la portabilità.