Che cos'è il tempo Unix

Il tempo Unix conta i secondi trascorsi dalla mezzanotte del 1° gennaio 1970 in UTC, l'epoch. È il modo in cui quasi tutti i sistemi operativi, i database e i protocolli memorizzano un istante: un solo numero, indipendente dal fuso orario e dall'ora legale.

Il numero non dice la sua unità. Dieci cifre sono secondi, tredici millisecondi, come in JavaScript e Java, sedici microsecondi e diciannove nanosecondi. Per le date fra il 1973 e il 2286 il numero di cifre basta a capirlo, ed è quello che fa la conversione automatica.

Il fuso orario entra solo quando si scrive la data per un essere umano: lo stesso timestamp è mezzanotte a Londra e l'una a Roma. Per questo il risultato mostra sia UTC sia l'ora locale del tuo dispositivo.

Errori frequenti

  • Scambiare millisecondi per secondi: un timestamp di tredici cifre letto in secondi cade decine di migliaia di anni nel futuro.
  • Dimenticare il fuso: una data scritta senza indicarlo può essere interpretata in UTC da un programma e in ora locale da un altro.
  • Salvare i secondi in un intero a 32 bit con segno: il 19 gennaio 2038 alle 03:14:07 UTC il valore trabocca e diventa negativo.

Domande frequenti

Il tempo Unix tiene conto dei secondi intercalari?

No. Ogni giorno vale esattamente 86.400 secondi; quando viene aggiunto un secondo intercalare, i sistemi lo ripetono o lo spalmano. Per questo il tempo Unix non è un conteggio esatto dei secondi fisici trascorsi.

Che cos'è il problema dell'anno 2038?

I sistemi che memorizzano i secondi in un intero a 32 bit con segno arrivano al massimo a 2.147.483.647, cioè il 19 gennaio 2038. Il secondo successivo diventa un numero negativo, che corrisponde al 1901.

Come ottengo il timestamp attuale in un programma?

In JavaScript Date.now() dà i millisecondi, in Python time.time() i secondi con decimali, in un terminale Linux date +%s i secondi interi. Il pulsante Adesso fa lo stesso qui.

Come funziona questo calcolo

Data UTC = epoch (1970-01-01 00:00:00 UTC) + timestamp ÷ unità. L'unità automatica è: secondi sotto 10^11, millisecondi sotto 10^14, microsecondi sotto 10^17, altrimenti nanosecondi. Da una data locale si sottrae lo scostamento del fuso valido in quella data, ora legale compresa. La settimana ISO è quella che contiene il giovedì: la settimana 1 contiene il primo giovedì dell'anno.