Timestamp Unix e fusi orari spiegati
I computer tengono il tempo come un unico numero: il conteggio dei secondi trascorsi da un momento fisso. Le persone leggono il tempo come una data, un’ora e un luogo. Quasi tutti i bug con le date nascono nella traduzione tra i due — una riunione sfasata di un’ora dopo il cambio dell’ora, una data che compare come 1970, un’esportazione sbagliata di un giorno. Questa guida spiega cosa significa il numero, come riconoscerne l’unità di misura e perché lo stesso istante ha un’ora locale diversa in ogni fuso orario.
Cosa conta un timestamp Unix
Un timestamp Unix è il numero di secondi trascorsi dal 1° gennaio 1970 alle 00:00:00 UTC, un momento noto come epoca Unix. A mezzogiorno UTC del 24 settembre 2026 valeva 1.790.251.200.
Il numero è lo stesso in ogni punto della Terra nello stesso istante. Non contiene alcun fuso orario: il fuso compare solo quando il numero viene trasformato in una data che una persona possa leggere. Per questo i timestamp sono il modo sicuro per memorizzare e scambiare istanti tra sistemi, mentre le ore locali servono solo per la visualizzazione.
Il tempo Unix ignora anche i secondi intercalari. Ogni giorno viene contato come esattamente 86.400 secondi, e quando si aggiunge un secondo intercalare l’orologio si limita a ripetere un secondo. Per quasi tutti gli scopi la cosa è invisibile, e i secondi intercalari sono destinati a sparire: nel 2022 la Conferenza generale dei pesi e delle misure ha deciso di smettere di aggiungerli entro il 2035.
01° gennaio 1970, 00:00:00 UTC: l’epoca stessa.179025120024 settembre 2026, 12:00:00 UTC.-8640031 dicembre 1969: i numeri negativi contano all’indietro.
Secondi o millisecondi?
Lo stesso momento viene spesso scritto in due unità. Gli strumenti Unix, i database e la maggior parte delle API usano i secondi; JavaScript, Java e molti sistemi di logging usano i millisecondi. Per le date di questo secolo lo rivela la lunghezza: 10 cifre sono secondi, 13 cifre sono millisecondi.
Sbagliare è facile da notare. Un valore in millisecondi letto come secondi finisce decine di migliaia di anni nel futuro; un valore in secondi letto come millisecondi finisce nel gennaio 1970. Se una data compare come 1970, la prima cosa da controllare è l’unità.
Il problema dell’anno 2038
Molti sistemi più vecchi memorizzano il timestamp come intero con segno a 32 bit, il cui valore massimo è 2.147.483.647. Quel secondo cade il 19 gennaio 2038 alle 03:14:07 UTC. Un secondo dopo il numero va in overflow e ricomincia dal 13 dicembre 1901.
I sistemi operativi, i database e i linguaggi moderni usano il tempo a 64 bit, che sposta il limite a miliardi di anni di distanza. Il rischio si trova nei dispositivi embedded, nei vecchi formati di file e nelle colonne di database dichiarate come interi a 32 bit — ed è per questo che date molto lontane nel futuro, come la scadenza di un prestito a 30 anni, possono causare errori già oggi.
UTC, offset e fusi orari
L’UTC, il tempo coordinato universale, è il riferimento rispetto al quale si misura ogni altro orario. Non cambia con le stagioni. GMT viene spesso usato come suo nome comune; per qualsiasi uso che non sia l’astronomia i due si possono considerare la stessa cosa.
Un offset UTC indica di quanto un orologio locale è avanti o indietro rispetto all’UTC: Lisbona in inverno è UTC+0, Berlino UTC+1, San Paolo UTC−3, Tokyo UTC+9. Gli offset non sono sempre ore intere — l’India è UTC+5:30 e il Nepal UTC+5:45 — e vanno da UTC−12 a UTC+14.
Un fuso orario è più di un offset. È l’intera storia degli offset e delle regole sull’ora legale di un luogo, registrata nel database tz con nomi come Europe/Lisbon o America/Sao_Paulo. Il software che converte date passate o future ha bisogno del fuso, non solo dell’offset di oggi, perché le regole cambiano: il Brasile, per esempio, ha abolito l’ora legale nel 2019.
| Scritto come | Cosa significa |
|---|---|
2026-09-24T12:00:00Z | ISO 8601 / RFC 3339 in UTC; la Z sta per UTC. |
2026-09-24T13:00:00+01:00 | Lo stesso istante, scritto con un offset locale di UTC+1. |
2026-09-24 13:00 | Un’ora locale senza offset né fuso — ambigua finché non sai dove è stata scritta. |
1790251200 | Lo stesso istante come timestamp Unix in secondi. |
L’ora legale
Molti paesi spostano gli orologi avanti di un’ora in estate e indietro in inverno, e non lo fanno tutti nello stesso giorno. Nell’Unione europea il cambio avviene alle 01:00 UTC dell’ultima domenica di marzo e dell’ultima domenica di ottobre, nello stesso istante in tutti gli Stati membri. Gli Stati Uniti cambiano la seconda domenica di marzo e la prima domenica di novembre, alle 2:00 ora locale. Nell’emisfero australe le stagioni sono invertite, e molti paesi — tra cui il Brasile e la maggior parte dell’Asia e dell’Africa — non cambiano affatto.
Così, per qualche settimana ogni primavera e ogni autunno, la differenza tra due città cambia di un’ora rispetto al solito. È allora che le riunioni ricorrenti slittano, ed è per questo che uno strumento di pianificazione ha bisogno delle città, non di offset fissi.
I cambi creano anche ore locali che non esistono e ore che si ripetono due volte. Nella notte in cui gli orologi vanno avanti, a Lisbona le 01:30 non arrivano mai; nella notte d’autunno, le 01:30 arrivano due volte, una con l’ora legale e una con l’ora solare. Un timestamp non ha nessuno dei due problemi, ed è un altro motivo per memorizzare gli istanti come timestamp.
Domande frequenti
Perché una data compare come 1° gennaio 1970?
Perché il valore memorizzato era 0, vuoto, oppure un timestamp in secondi letto come millisecondi. L’epoca è l’aspetto che ha una data quando il numero che la rappresenta è zero o vicino a zero.
Un timestamp Unix è in UTC o in ora locale?
Né l’uno né l’altro: è un conteggio di secondi a partire da un punto d’origine in UTC, ed è lo stesso in ogni luogo della Terra. Diventa un’ora UTC o locale solo quando viene visualizzato.
Perché la mia esportazione è sfasata di un giorno?
Di solito una data senza ora è stata trattata come mezzanotte UTC e poi mostrata in un fuso orario indietro rispetto all’UTC, il che la trasforma nella sera del giorno prima. Memorizza le date che non hanno un’ora del giorno come semplici date, non come timestamp.
Cosa significa la Z alla fine di un orario?
Indica che l’orario è in UTC, come +00:00. La lettera deriva dal nome militare del fuso, «Zulu».