Comando date in Linux: formattare data e ora e usare UTC

date mostra la data e l’ora correnti e permette di scegliere il formato dell’output. È utile per creare stringhe di data in script, nomi di file e registrazioni di log.

L’output predefinito dipende da fuso orario e impostazioni locali. Con +FORMATO selezioni i campi da visualizzare; con -u li esprimi nel Tempo coordinato universale (UTC). Queste operazioni di lettura non cambiano l’orologio del sistema, a differenza delle opzioni che impostano effettivamente data e ora.

Sintassi di base

date [opzioni] [+formato]

Le parentesi indicano argomenti facoltativi e non vanno digitate. Il segno + deve precedere il formato. Apri un terminale sul sistema da esaminare: per gli esempi di visualizzazione non serve sudo. In SSH ottieni la data del sistema remoto.

Le opzioni disponibili dipendono dall’implementazione. Su GNU/Linux sono comuni quelle di GNU coreutils; consulta man date e l’aiuto della versione installata. Non presumere che opzioni GNU come -d e -I abbiano lo stesso significato su altri sistemi Unix.

Esempi pratici

Data e ora correnti

date

Il comando usa il formato predefinito della locale. Giorno e mese possono essere scritti in forma abbreviata e in una lingua diversa: per elaborare il risultato in uno script è preferibile specificare esplicitamente il formato.

Data in un formato uniforme

date +%Y-%m-%d

Ottieni anno, mese e giorno, per esempio 2026-09-28. Questo valore è illustrativo: l’esecuzione restituisce la data corrente nel fuso applicato. Il formato è utile nei nomi dei file, ma una data senza ora non distingue più esecuzioni nello stesso giorno.

Data e ora in UTC

date -u +%Y-%m-%dT%H:%M:%SZ

Un risultato ha la forma 2026-09-28T00:00:00Z, con valori dipendenti dall’istante di esecuzione. T separa data e ora; la Z finale è un carattere letterale che indica UTC in questo esempio. Non aggiungerla all’ora locale omettendo -u: il testo non converte da solo il fuso.

Capire formato e fuso orario

Per mostrare l’ora UTC fino ai minuti con un’etichetta leggibile, usa un unico argomento tra virgolette: lo spazio interno deve rimanere nel formato.

date -u '+%Y-%m-%d %H:%M UTC'

Esempio di output, non lettura dell’ora corrente:

2026-09-28 00:00 UTC

%Y indica l’anno, normalmente su quattro cifre; %m il mese e %d il giorno. %H è l’ora su 24 ore, %M i minuti e %S i secondi. Maiuscole e minuscole contano: %m e %M non sono intercambiabili.

Senza -u, GNU date usa le regole della variabile d’ambiente TZ, se definita, altrimenti quelle predefinite del sistema. Un’assegnazione come TZ=UTC0 date vale solo per quel comando e non cambia il fuso di sistema. Con -u, il comando opera in UTC anche se TZ indica un altro fuso.

Negli script GNU, LC_ALL=C rende prevedibili i nomi testuali di giorni e mesi. Per confrontare registrazioni tra server preferisci un formato numerico con indicazione del fuso. Usare UTC elimina l’ambiguità del fuso, ma non sincronizza gli orologi: due server possono avere comunque orari discordanti.

Opzioni e formati principali

Opzione o formato Risultato
+%Y-%m-%d Anno, mese e giorno separati da trattini.
+%H:%M:%S Ore, minuti e secondi; da solo non specifica il fuso.
-u Visualizza in UTC senza cambiare l’orologio o il fuso configurato.
-I In GNU date mostra per impostazione predefinita la sola data ISO 8601, non un timestamp completo.
-d stringa In GNU date interpreta e visualizza la data indicata invece dell’istante attuale, senza impostare il clock.

Precauzioni e verifica dei risultati

Per riprodurre l’output illustrativo con GNU date puoi eseguire date -u -d '2026-09-28 00:00:00 UTC' '+%Y-%m-%d %H:%M UTC'. Il risultato atteso è 2026-09-28 00:00 UTC; la data fissa e il fuso esplicito rendono il confronto ripetibile. La stringa passata a -d deve rispettare i formati di ingresso accettati da GNU date: non tutte le date scritte in lingua naturale o in formato locale sono interpretabili senza ambiguità.

La verifica con GNU coreutils 8.32 tramite Git per Windows ha eseguito i quattro esempi di lettura, riprodotto l’output fisso e controllato formato ISO, mese rispetto a minuti e precedenza di -u su un TZ a scarto fisso. Si tratta di prove su Windows, non di una verifica del servizio orario Linux o della sincronizzazione di rete.

date -s e altri modi di impostare l’ora modificano invece il sistema e richiedono i permessi necessari. Possono influire su autenticazione, log e attività pianificate: prima di intervenire controlla la configurazione e lo stato della sincronizzazione. Gli esempi di questa guida non impostano l’ora; non è stata eseguita alcuna modifica dell’orologio.

Se GNU date rifiuta una stringa, verifica prima formato, virgolette e fuso dichiarato; uno stato di uscita diverso da zero segnala un errore. Non interpretare un valore illustrativo come conferma dell’ora reale e non correggere l’orologio soltanto perché una visualizzazione usa un fuso diverso.

Domande frequenti

Quale fuso orario segue l’output di date?

GNU date segue TZ quando è definita e, altrimenti, il fuso predefinito del sistema. L’opzione -u seleziona UTC per quell’esecuzione senza cambiare la configurazione permanente.

Documentazione ufficiale

Consulta le sezioni «date invocation», «Date format specifiers» e «Options for date» del manuale nel repository ufficiale GNU coreutils per sintassi, formati e opzioni.