+\begin{figure}[!htb]
+ \footnotesize
+ \centering
+ \begin{minipage}[c]{15cm}
+ \includestruct{listati/tms.h}
+ \end{minipage}
+ \normalsize
+ \caption{La struttura \structd{tms} dei tempi di processore associati a un
+ processo.}
+ \label{fig:sys_tms_struct}
+\end{figure}
+
+Gli altri due campi mantengono rispettivamente la somma dell'\textit{user
+ time} ed del \textit{system time} di tutti i processi figli che sono
+terminati; il kernel cioè somma in \var{tms\_cutime} il valore di
+\var{tms\_utime} e \var{tms\_cutime} per ciascun figlio del quale è stato
+ricevuto lo stato di terminazione, e lo stesso vale per \var{tms\_cstime}.
+
+Si tenga conto che l'aggiornamento di \var{tms\_cutime} e \var{tms\_cstime}
+viene eseguito solo quando una chiamata a \func{wait} o \func{waitpid} è
+ritornata. Per questo motivo se un processo figlio termina prima di ricevere
+lo stato di terminazione di tutti i suoi figli, questi processi
+``\textsl{nipoti}'' non verranno considerati nel calcolo di questi tempi.
+
+\itindend{process~time}
+
+
+\subsection{Le funzioni per il \textit{calendar time}}
+\label{sec:sys_time_base}
+
+\itindbeg{calendar~time}
+
+Come anticipato in sez.~\ref{sec:sys_unix_time} il \textit{calendar time} è
+mantenuto dal kernel in una variabile di tipo \type{time\_t},\footnote{in
+ realtà il kernel usa una rappresentazione interna di che fornisce una
+ precisione molto maggiore, e consente per questo anche di usare
+ rappresentazioni diverse del \textit{calendar time}.} che usualmente
+corrisponde ad un tipo elementare (in Linux è definito come \ctyp{long int},
+che di norma corrisponde a 32 bit). Il valore corrente del \textit{calendar
+ time}, che indicheremo come \textsl{tempo di sistema}, può essere ottenuto
+con la funzione \funcd{time} che lo restituisce nel suddetto formato; il suo
+prototipo è:
+\begin{prototype}{time.h}{time\_t time(time\_t *t)}
+ Legge il valore corrente del \textit{calendar time}.
+
+ \bodydesc{La funzione ritorna il valore del \textit{calendar time} in caso
+ di successo e -1 in caso di errore, che può essere solo \errval{EFAULT}.}
+\end{prototype}
+\noindent dove \param{t}, se non nullo, deve essere l'indirizzo di una
+variabile su cui duplicare il valore di ritorno.
+
+Analoga a \func{time} è la funzione \funcd{stime} che serve per effettuare
+l'operazione inversa, e cioè per impostare il tempo di sistema qualora questo
+sia necessario; il suo prototipo è:
+\begin{prototype}{time.h}{int stime(time\_t *t)}
+ Imposta a \param{t} il valore corrente del \textit{calendar time}.
+
+ \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di errore,
+ che può essere \errval{EFAULT} o \errval{EPERM}.}
+\end{prototype}
+\noindent dato che modificare l'ora ha un impatto su tutto il sistema
+il cambiamento dell'orologio è una operazione privilegiata e questa funzione
+può essere usata solo da un processo con i privilegi di amministratore,
+altrimenti la chiamata fallirà con un errore di \errcode{EPERM}.
+
+Data la scarsa precisione nell'uso di \type{time\_t} (che ha una risoluzione
+massima di un secondo) quando si devono effettuare operazioni sui tempi di
+norma l'uso delle funzioni precedenti è sconsigliato, ed esse sono di solito
+sostituite da \funcd{gettimeofday} e \funcd{settimeofday},\footnote{le due
+ funzioni \func{time} e \func{stime} sono più antiche e derivano da SVr4,
+ \func{gettimeofday} e \func{settimeofday} sono state introdotte da BSD, ed
+ in BSD4.3 sono indicate come sostitute delle precedenti.} i cui prototipi
+sono:
+\begin{functions}
+ \headdecl{sys/time.h}
+ \headdecl{time.h}
+
+ \funcdecl{int gettimeofday(struct timeval *tv, struct timezone *tz)}
+
+ Legge il tempo corrente del sistema.
+
+ \funcdecl{int settimeofday(const struct timeval *tv, const struct timezone
+ *tz)}
+
+ Imposta il tempo di sistema.
+
+ \bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in
+ caso di errore, nel qual caso \var{errno} può assumere i valori
+ \errval{EINVAL} \errval{EFAULT} e per \func{settimeofday} anche
+ \errval{EPERM}.}
+\end{functions}
+
+Si noti come queste funzioni utilizzino per indicare il tempo una struttura di
+tipo \struct{timeval}, la cui definizione si è già vista in
+fig.~\ref{fig:sys_timeval_struct}, questa infatti permette una espressione
+alternativa dei valori del \textit{calendar time}, con una precisione,
+rispetto a \type{time\_t}, fino al microsecondo.\footnote{la precisione è solo
+ teorica, la precisione reale della misura del tempo dell'orologio di sistema
+ non dipende dall'uso di queste strutture.}
+
+Come nel caso di \func{stime} anche \func{settimeofday} (la cosa continua a
+valere per qualunque funzione che vada a modificare l'orologio di sistema,
+quindi anche per quelle che tratteremo in seguito) può essere utilizzata solo
+da un processo coi privilegi di amministratore.\footnote{più precisamente la
+ capabitity \const{CAP\_SYS\_TIME}.}
+
+Il secondo argomento di entrambe le funzioni è una struttura
+\struct{timezone}, che storicamente veniva utilizzata per specificare appunto
+la \textit{time zone}, cioè l'insieme del fuso orario e delle convenzioni per
+l'ora legale che permettevano il passaggio dal tempo universale all'ora
+locale. Questo argomento oggi è obsoleto ed in Linux non è mai stato
+utilizzato; esso non è supportato né dalle vecchie \textsl{libc5}, né dalle
+\textsl{glibc}: pertanto quando si chiama questa funzione deve essere sempre
+impostato a \val{NULL}.
+
+Modificare l'orologio di sistema con queste funzioni è comunque problematico,
+in quanto esse effettuano un cambiamento immediato. Questo può creare dei
+buchi o delle ripetizioni nello scorrere dell'orologio di sistema, con
+conseguenze indesiderate. Ad esempio se si porta avanti l'orologio si possono
+perdere delle esecuzioni di \cmd{cron} programmate nell'intervallo che si è
+saltato. Oppure se si porta indietro l'orologio si possono eseguire due volte
+delle operazioni previste nell'intervallo di tempo che viene ripetuto.
+
+Per questo motivo la modalità più corretta per impostare l'ora è quella di
+usare la funzione \funcd{adjtime}, il cui prototipo è:
+\begin{prototype}{sys/time.h}
+{int adjtime(const struct timeval *delta, struct timeval *olddelta)}
+
+ Aggiusta del valore \param{delta} l'orologio di sistema.
+
+ \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+ errore, nel qual caso \var{errno} assumerà il valore \errcode{EPERM}.}
+\end{prototype}
+
+Questa funzione permette di avere un aggiustamento graduale del tempo di
+sistema in modo che esso sia sempre crescente in maniera monotona. Il valore
+di \param{delta} esprime il valore di cui si vuole spostare l'orologio; se è
+positivo l'orologio sarà accelerato per un certo tempo in modo da guadagnare
+il tempo richiesto, altrimenti sarà rallentato. Il secondo argomento viene
+usato, se non nullo, per ricevere il valore dell'ultimo aggiustamento
+effettuato.
+
+
+\begin{figure}[!htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{15cm}
+ \includestruct{listati/timex.h}
+ \end{minipage}
+ \normalsize
+ \caption{La struttura \structd{timex} per il controllo dell'orologio di
+ sistema.}
+ \label{fig:sys_timex_struct}
+\end{figure}
+
+Linux poi prevede un'altra funzione, che consente un aggiustamento molto più
+dettagliato del tempo, permettendo ad esempio anche di modificare anche la
+velocità dell'orologio di sistema. La funzione è \funcd{adjtimex} ed il suo
+prototipo è:
+\begin{prototype}{sys/timex.h}
+{int adjtimex(struct timex *buf)}
+
+ Aggiusta del valore \param{delta} l'orologio di sistema.
+
+ \bodydesc{La funzione restituisce lo stato dell'orologio (un valore $>0$) in
+ caso di successo e -1 in caso di errore, nel qual caso \var{errno}
+ assumerà i valori \errval{EFAULT}, \errval{EINVAL} ed \errval{EPERM}.}
+\end{prototype}
+
+La funzione richiede una struttura di tipo \struct{timex}, la cui definizione,
+così come effettuata in \file{sys/timex.h}, è riportata in
+fig.~\ref{fig:sys_timex_struct}. L'azione della funzione dipende dal valore del
+campo \var{mode}, che specifica quale parametro dell'orologio di sistema,
+specificato in un opportuno campo di \struct{timex}, deve essere impostato. Un
+valore nullo serve per leggere i parametri correnti; i valori diversi da zero
+devono essere specificati come OR binario delle costanti riportate in
+tab.~\ref{tab:sys_timex_mode}.
+
+La funzione utilizza il meccanismo di David L. Mills, descritto
+nell'\href{http://www.ietf.org/rfc/rfc1305.txt}{RFC~1305}, che è alla base del
+protocollo NTP. La funzione è specifica di Linux e non deve essere usata se la
+portabilità è un requisito, le \acr{glibc} provvedono anche un suo omonimo
+\func{ntp\_adjtime}. La trattazione completa di questa funzione necessita di
+una lettura approfondita del meccanismo descritto nell'RFC~1305, ci limitiamo
+a descrivere in tab.~\ref{tab:sys_timex_mode} i principali valori utilizzabili
+per il campo \var{mode}, un elenco più dettagliato del significato dei vari
+campi della struttura \struct{timex} può essere ritrovato in \cite{glibc}.
+
+\begin{table}[!htb]
+ \footnotesize
+ \centering
+ \begin{tabular}[c]{|l|c|p{8.5cm}|}
+ \hline
+ \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\
+ \hline
+ \hline
+ \const{ADJ\_OFFSET} & 0x0001 & Imposta la differenza fra il tempo
+ reale e l'orologio di sistema:
+ deve essere indicata in microsecondi
+ nel campo \var{offset} di
+ \struct{timex}.\\
+ \const{ADJ\_FREQUENCY} & 0x0002 & Imposta la differenze in frequenza
+ fra il tempo reale e l'orologio di
+ sistema: deve essere indicata
+ in parti per milione nel campo
+ \var{frequency} di \struct{timex}.\\
+ \const{ADJ\_MAXERROR} & 0x0004 & Imposta il valore massimo
+ dell'errore
+ sul tempo, espresso in microsecondi
+ nel campo \var{maxerror} di
+ \struct{timex}.\\
+ \const{ADJ\_ESTERROR} & 0x0008 & Imposta la stima dell'errore
+ sul tempo, espresso in microsecondi
+ nel campo \var{esterror} di
+ \struct{timex}.\\
+ \const{ADJ\_STATUS} & 0x0010 & Imposta alcuni
+ valori di stato interni usati dal
+ sistema nella gestione
+ dell'orologio specificati nel campo
+ \var{status} di \struct{timex}.\\
+ \const{ADJ\_TIMECONST} & 0x0020 & Imposta la larghezza di banda del
+ PLL implementato dal kernel,
+ specificato nel campo
+ \var{constant} di \struct{timex}.\\
+ \const{ADJ\_TICK} & 0x4000 & Imposta il valore dei \textit{tick}
+ \itindex{clock~tick} del timer in
+ microsecondi, espresso nel campo
+ \var{tick} di \struct{timex}.\\
+ \const{ADJ\_OFFSET\_SINGLESHOT}&0x8001&Imposta uno spostamento una tantum
+ dell'orologio secondo il valore del
+ campo \var{offset} simulando il
+ comportamento di \func{adjtime}.\\
+ \hline
+ \end{tabular}
+ \caption{Costanti per l'assegnazione del valore del campo \var{mode} della
+ struttura \struct{timex}.}
+ \label{tab:sys_timex_mode}
+\end{table}
+
+Il valore delle costanti per \var{mode} può essere anche espresso, secondo la
+sintassi specificata per la forma equivalente di questa funzione definita come
+\func{ntp\_adjtime}, utilizzando il prefisso \code{MOD} al posto di
+\code{ADJ}.
+
+\begin{table}[htb]
+ \footnotesize
+ \centering
+ \begin{tabular}[c]{|l|c|l|}
+ \hline
+ \textbf{Nome} & \textbf{Valore} & \textbf{Significato}\\
+ \hline
+ \hline
+ \const{TIME\_OK} & 0 & L'orologio è sincronizzato.\\
+ \const{TIME\_INS} & 1 & Insert leap second.\\
+ \const{TIME\_DEL} & 2 & Delete leap second.\\
+ \const{TIME\_OOP} & 3 & Leap second in progress.\\
+ \const{TIME\_WAIT} & 4 & Leap second has occurred.\\
+ \const{TIME\_BAD} & 5 & L'orologio non è sincronizzato.\\
+ \hline
+ \end{tabular}
+ \caption{Possibili valori di ritorno di \func{adjtimex}.}
+ \label{tab:sys_adjtimex_return}
+\end{table}
+
+La funzione ritorna un valore positivo che esprime lo stato dell'orologio di
+sistema; questo può assumere i valori riportati in
+tab.~\ref{tab:sys_adjtimex_return}. Un valore di -1 viene usato per riportare
+un errore; al solito se si cercherà di modificare l'orologio di sistema
+(specificando un \var{mode} diverso da zero) senza avere i privilegi di
+amministratore si otterrà un errore di \errcode{EPERM}.
+
+
+
+\subsection{La gestione delle date.}
+\label{sec:sys_date}
+
+Le funzioni viste al paragrafo precedente sono molto utili per trattare le
+operazioni elementari sui tempi, però le rappresentazioni del tempo ivi
+illustrate, se han senso per specificare un intervallo, non sono molto
+intuitive quando si deve esprimere un'ora o una data. Per questo motivo è
+stata introdotta una ulteriore rappresentazione, detta \textit{broken-down
+ time}, che permette appunto di \textsl{suddividere} il \textit{calendar
+ time} usuale in ore, minuti, secondi, ecc.
+
+Questo viene effettuato attraverso una opportuna struttura \struct{tm}, la cui
+definizione è riportata in fig.~\ref{fig:sys_tm_struct}, ed è in genere questa
+struttura che si utilizza quando si deve specificare un tempo a partire dai
+dati naturali (ora e data), dato che essa consente anche di trattare la
+gestione del fuso orario e dell'ora legale.\footnote{in realtà i due campi
+ \var{tm\_gmtoff} e \var{tm\_zone} sono estensioni previste da BSD e dalle
+ \acr{glibc}, che, quando è definita \macro{\_BSD\_SOURCE}, hanno la forma in
+ fig.~\ref{fig:sys_tm_struct}.}
+
+Le funzioni per la gestione del \textit{broken-down time} sono varie e vanno
+da quelle usate per convertire gli altri formati in questo, usando o meno
+l'ora locale o il tempo universale, a quelle per trasformare il valore di un
+tempo in una stringa contenente data ed ora, i loro prototipi sono:
+\begin{functions}
+ \headdecl{time.h}
+ \funcdecl{char *\funcd{asctime}(const struct tm *tm)}
+ Produce una stringa con data e ora partendo da un valore espresso in
+ \textit{broken-down time}.
+
+ \funcdecl{char *\funcd{ctime}(const time\_t *timep)}
+ Produce una stringa con data e ora partendo da un valore espresso in
+ in formato \type{time\_t}.
+
+ \funcdecl{struct tm *\funcd{gmtime}(const time\_t *timep)}
+ Converte il \textit{calendar time} dato in formato \type{time\_t} in un
+ \textit{broken-down time} espresso in UTC.
+
+ \funcdecl{struct tm *\funcd{localtime}(const time\_t *timep)}
+ Converte il \textit{calendar time} dato in formato \type{time\_t} in un
+ \textit{broken-down time} espresso nell'ora locale.
+
+ \funcdecl{time\_t \funcd{mktime}(struct tm *tm)}
+ Converte il \textit{broken-down time} in formato \type{time\_t}.
+
+ \bodydesc{Tutte le funzioni restituiscono un puntatore al risultato in caso
+ di successo e \val{NULL} in caso di errore, tranne che \func{mktime} che
+ restituisce direttamente il valore o -1 in caso di errore.}
+\end{functions}
+
+\begin{figure}[!htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{15cm}
+ \includestruct{listati/tm.h}
+ \end{minipage}
+ \normalsize
+ \caption{La struttura \structd{tm} per una rappresentazione del tempo in
+ termini di ora, minuti, secondi, ecc.}
+ \label{fig:sys_tm_struct}
+\end{figure}
+
+
+
+Le prime due funzioni, \func{asctime} e \func{ctime} servono per poter
+stampare in forma leggibile un tempo; esse restituiscono il puntatore ad una
+stringa, allocata staticamente, nella forma:
+\begin{verbatim}
+"Wed Jun 30 21:49:08 1993\n"
+\end{verbatim}
+e impostano anche la variabile \var{tzname} con l'informazione della
+\textit{time zone} corrente; \func{ctime} è banalmente definita in termini di
+\func{asctime} come \code{asctime(localtime(t)}. Dato che l'uso di una stringa
+statica rende le funzioni non \index{funzioni!rientranti} rientranti POSIX.1c
+e SUSv2 prevedono due sostitute \index{funzioni!rientranti} rientranti, il cui
+nome è al solito ottenuto aggiungendo un \code{\_r}, che prendono un secondo
+argomento \code{char *buf}, in cui l'utente deve specificare il buffer su cui
+la stringa deve essere copiata (deve essere di almeno 26 caratteri).
+
+Le altre tre funzioni, \func{gmtime}, \func{localtime} e \func{mktime} servono
+per convertire il tempo dal formato \type{time\_t} a quello di \struct{tm} e
+viceversa; \func{gmtime} effettua la conversione usando il tempo coordinato
+universale (UTC), cioè l'ora di Greenwich; mentre \func{localtime} usa l'ora
+locale; \func{mktime} esegue la conversione inversa.
+
+Anche in questo caso le prime due funzioni restituiscono l'indirizzo di una
+struttura allocata staticamente, per questo sono state definite anche altre
+due versioni \index{funzioni!rientranti} rientranti (con la solita estensione
+\code{\_r}), che prevedono un secondo argomento \code{struct tm *result},
+fornito dal chiamante, che deve preallocare la struttura su cui sarà
+restituita la conversione.
+
+Come mostrato in fig.~\ref{fig:sys_tm_struct} il \textit{broken-down time}
+permette di tenere conto anche della differenza fra tempo universale e ora
+locale, compresa l'eventuale ora legale. Questo viene fatto attraverso le tre
+variabili globali mostrate in fig.~\ref{fig:sys_tzname}, cui si accede quando
+si include \file{time.h}. Queste variabili vengono impostate quando si chiama
+una delle precedenti funzioni di conversione, oppure invocando direttamente la
+funzione \funcd{tzset}, il cui prototipo è:
+\begin{prototype}{sys/timex.h}
+{void tzset(void)}
+
+ Imposta le variabili globali della \textit{time zone}.
+
+ \bodydesc{La funzione non ritorna niente e non dà errori.}
+\end{prototype}
+
+La funzione inizializza le variabili di fig.~\ref{fig:sys_tzname} a partire dal
+valore della variabile di ambiente \const{TZ}, se quest'ultima non è definita
+verrà usato il file \conffile{/etc/localtime}.
+
+\begin{figure}[!htb]
+ \footnotesize
+ \centering
+ \begin{minipage}[c]{15cm}
+ \includestruct{listati/time_zone_var.c}
+ \end{minipage}
+ \normalsize
+ \caption{Le variabili globali usate per la gestione delle \textit{time
+ zone}.}
+ \label{fig:sys_tzname}
+\end{figure}
+
+La variabile \var{tzname} contiene due stringhe, che indicano i due nomi
+standard della \textit{time zone} corrente. La prima è il nome per l'ora
+solare, la seconda per l'ora legale.\footnote{anche se sono indicati come
+ \code{char *} non è il caso di modificare queste stringhe.} La variabile
+\var{timezone} indica la differenza di fuso orario in secondi, mentre
+\var{daylight} indica se è attiva o meno l'ora legale.
+
+Benché la funzione \func{asctime} fornisca la modalità più immediata per
+stampare un tempo o una data, la flessibilità non fa parte delle sue
+caratteristiche; quando si vuole poter stampare solo una parte (l'ora, o il
+giorno) di un tempo si può ricorrere alla più sofisticata \funcd{strftime},
+il cui prototipo è:
+\begin{prototype}{time.h}
+{size\_t strftime(char *s, size\_t max, const char *format,
+ const struct tm *tm)}
+
+Stampa il tempo \param{tm} nella stringa \param{s} secondo il formato
+\param{format}.
+
+ \bodydesc{La funzione ritorna il numero di caratteri stampati in \param{s},
+ altrimenti restituisce 0.}
+\end{prototype}
+
+La funzione converte opportunamente il tempo \param{tm} in una stringa di
+testo da salvare in \param{s}, purché essa sia di dimensione, indicata da
+\param{size}, sufficiente. I caratteri generati dalla funzione vengono
+restituiti come valore di ritorno, ma non tengono conto del terminatore
+finale, che invece viene considerato nel computo della dimensione; se
+quest'ultima è eccessiva viene restituito 0 e lo stato di \param{s} è
+indefinito.
+
+\begin{table}[htb]
+ \footnotesize
+ \centering
+ \begin{tabular}[c]{|c|l|p{6cm}|}
+ \hline
+ \textbf{Modificatore} & \textbf{Esempio} & \textbf{Significato}\\
+ \hline
+ \hline
+ \var{\%a}&\texttt{Wed} & Nome del giorno, abbreviato.\\
+ \var{\%A}&\texttt{Wednesday} & Nome del giorno, completo.\\
+ \var{\%b}&\texttt{Apr} & Nome del mese, abbreviato.\\
+ \var{\%B}&\texttt{April} & Nome del mese, completo.\\
+ \var{\%c}&\texttt{Wed Apr 24 18:40:50 2002}& Data e ora.\\
+ \var{\%d}&\texttt{24} & Giorno del mese.\\
+ \var{\%H}&\texttt{18} & Ora del giorno, da 0 a 24.\\
+ \var{\%I}&\texttt{06} & Ora del giorno, da 0 a 12.\\
+ \var{\%j}&\texttt{114} & Giorno dell'anno.\\
+ \var{\%m}&\texttt{04} & Mese dell'anno.\\
+ \var{\%M}&\texttt{40} & Minuto.\\
+ \var{\%p}&\texttt{PM} & AM/PM.\\
+ \var{\%S}&\texttt{50} & Secondo.\\
+ \var{\%U}&\texttt{16} & Settimana dell'anno (partendo dalla
+ domenica).\\
+ \var{\%w}&\texttt{3} & Giorno della settimana. \\
+ \var{\%W}&\texttt{16} & Settimana dell'anno (partendo dal
+ lunedì).\\
+ \var{\%x}&\texttt{04/24/02} & La data.\\
+ \var{\%X}&\texttt{18:40:50} & L'ora.\\
+ \var{\%y}&\texttt{02} & Anno nel secolo.\\
+ \var{\%Y}&\texttt{2002} & Anno.\\
+ \var{\%Z}&\texttt{CEST} & Nome della \textit{timezone}.\\
+ \var{\%\%}&\texttt{\%} & Il carattere \%.\\
+ \hline
+ \end{tabular}
+ \caption{Valori previsti dallo standard ANSI C per modificatore della
+ stringa di formato di \func{strftime}.}
+ \label{tab:sys_strftime_format}
+\end{table}
+
+Il risultato della funzione è controllato dalla stringa di formato
+\param{format}, tutti i caratteri restano invariati eccetto \texttt{\%} che
+viene utilizzato come modificatore; alcuni\footnote{per la precisione quelli
+ definiti dallo standard ANSI C, che sono anche quelli riportati da POSIX.1;
+ le \acr{glibc} provvedono tutte le estensioni introdotte da POSIX.2 per il
+ comando \cmd{date}, i valori introdotti da SVID3 e ulteriori estensioni GNU;
+ l'elenco completo dei possibili valori è riportato nella pagina di manuale
+ della funzione.} dei possibili valori che esso può assumere sono riportati
+in tab.~\ref{tab:sys_strftime_format}. La funzione tiene conto anche della
+presenza di una localizzazione per stampare in maniera adeguata i vari nomi.
+
+\itindend{calendar~time}