Convertire un timestamp Unix in data, e una data in timestamp
Pubblicata il · Aggiornata il 3 min di lettura
Un timestamp Unix è un numero che conta il tempo trascorso dal 1° gennaio 1970 a mezzanotte, in tempo universale. Lo incontrate nei database, nei log dei programmi e nelle interfacce dei siti. Due domande decidono la data che ottenete: l'unità del numero e il fuso orario in cui leggete il risultato.
Un valore di riferimento
Convertire timestamp Unix dà tre letture dello stesso istante. Per 1700000000, con un browser impostato sull'ora di Parigi:
| Lettura | Risultato |
|---|---|
| Data UTC | Tue, 14 Nov 2023 22:13:20 GMT |
| Data locale | 14 novembre 2023 alle 23:13:20 UTC+1 |
| ISO | 2023-11-14T22:13:20.000Z |
L'ora locale segue il fuso del browser: un'ora in più a Parigi in inverno. Lo stesso timestamp è un unico istante, letto in due fusi orari.
L'unità si riconosce dal numero di cifre
L'impostazione predefinita riconosce l'unità dalla lunghezza del numero. I tre valori seguenti indicano lo stesso istante, entro la precisione.
| Numero | Cifre | Unità riconosciuta | Istante ottenuto |
|---|---|---|---|
| 1700000000 | 10 | Secondi | 14 nov 2023, 22:13:20 UTC |
| 1700000000000 | 13 | Millisecondi | 14 nov 2023, 22:13:20 UTC |
| 1700000000123456 | 16 | Microsecondi | 14 nov 2023, 22:13:20.123 UTC |
La regola: fino a 11 cifre, secondi; da 12 a 14, millisecondi; 15 e 16, microsecondi. L'impostazione «millisecondi» forza quell'unità.
La trappola della regola
Poiché l'unità si deduce dalla lunghezza, un valore ambiguo viene letto in un solo modo: 10000000000 (11 cifre) dà il 20 novembre 2286, e 100000000000 (12 cifre) il 3 marzo 1973. Un timestamp in millisecondi anteriore a marzo 1973 ha 11 cifre o meno e verrebbe letto come secondi: forzate allora l'impostazione «millisecondi».
Valori anteriori al 1970 e limite del 2038
Un numero negativo indica un istante anteriore al 1970: −1 dà il 31 dicembre 1969 alle 23:59:59 UTC, e 0 dà il 1° gennaio 1970 a mezzanotte.
Il numero 2147483647 è il più grande che un intero a 32 bit con segno possa contenere: dà il 19 gennaio 2038 alle 03:14:07 UTC. Il numero successivo, 2147483648, dà le 03:14:08. Lo strumento prosegue senza limite, ma un sistema che memorizza il tempo su 32 bit non può: è il «bug dell'anno 2038».
Convertire una data in timestamp
Inserite una data invece di un numero: lo strumento dà il timestamp in secondi e in millisecondi.
| Inserimento | Timestamp in secondi | Lettura |
|---|---|---|
| 2026-01-01 | 1767225600 | Mezzanotte in tempo universale, nessun fuso indicato |
| 2026-01-01T10:30:00+01:00 | 1767259800 | Le 10:30 a Parigi, cioè le 09:30 in tempo universale |
| 2024-02-29 | 1709164800 | Anno bisestile accettato |
Una data senza fuso orario viene letta in tempo universale, non in ora locale: lo strumento lo ricorda nel risultato. Una data che non esiste, come il 30 febbraio 2026, viene rifiutata con un messaggio.
Errori comuni
- Leggere i millisecondi come secondi: la data finisce migliaia di anni troppo lontano.
- Dimenticare il fuso orario: una data letta come locale e poi inviata come universale si sposta di una o più ore.
- Scrivere una data senza fuso orario pensando all'ora locale, quando verrà letta in tempo universale.
Per contare i giorni tra due date, vedete Contare i giorni tra due date.
Per quali casi
Un log di programma, un database, la risposta di un servizio online o un file esportato: il numero è difficile da leggere, la data si legge subito.
Verificare una conversione
- Rileggete la riga UTC, che non dipende dal vostro dispositivo.
- Verificate l'unità indicata nella prima riga del risultato.
- Riconvertite la data ottenuta: dovete ritrovare il numero di partenza.
Domande frequenti
- Che cos'è un timestamp Unix?
- Il numero di secondi trascorsi dal 1° gennaio 1970 a mezzanotte, in tempo universale.
- Come si capisce se un numero è in secondi o in millisecondi?
- Lo strumento lo deduce dal numero di cifre: fino a 11 cifre, secondi; da 12 a 14, millisecondi; 15 e 16, microsecondi.
- Che cosa succede nel 2038?
- Il numero 2147483647, il più grande intero a 32 bit con segno, corrisponde al 19 gennaio 2038. Un sistema che memorizza il tempo su 32 bit non può andare oltre.
- Quale fuso orario si usa per una data senza fuso?
- Il tempo universale, non l'ora locale. Lo strumento lo ricorda nel risultato.
