Timestamp in data
Converti un timestamp in una data leggibile. Supporta secondi, millisecondi e nanosecondi.
Nel 2038 un orologio a 32 bit non torna al 1970: atterra nel 1901
Una marca temporale con segno a 32 bit si esaurisce a 2.147.483.647 secondi, cioè il 19 gennaio 2038 alle 03:14:07 UTC. Il secondo successivo non torna a zero. Salta al valore più negativo che il tipo può contenere, portando l'orologio al 13 dicembre 1901: un sistema che fallisce così indietreggia di 137 anni.
Come funziona
- Converte una marca temporale Unix in una data leggibile e viceversa, in UTC e in ora locale.
- Rileva se l'input è in secondi o in millisecondi, che è l'errore più comune.
- Gestisce le marche temporali negative, che sono valide e rappresentano date anteriori al 1970.
marca temporale = secondi trascorsi dal 1970-01-01 00:00:00 UTC massimo a 32 bit con segno = 2.147.483.647 → 2038-01-19 03:14:07 UTC il secondo successivo salta a −2.147.483.648 → 1901-12-13 20:45:52 UTC massimo a 64 bit con segno ≈ 9,223 × 10¹⁸ secondi: circa 292 miliardi di anni
Esempio pratico
Lo stesso valore a dieci cifre letto in due modi, più il limite che chiude il tempo a 32 bit.
- 1770000000 letto come secondi → 2026-02-02
- 1770000000 letto come millisecondi → 1970-01-21
- 10 cifre significano secondi; 13 cifre millisecondi
- 2147483647 → 2038-01-19 03:14:07 UTC
- un secondo dopo → 1901-12-13 20:45:52 UTC
Il pericoloso è l'errore di unità, perché fallisce in silenzio. Leggere millisecondi come secondi ti scaraventa nell'anno 58.000 e salta subito all'occhio; leggere secondi come millisecondi ti porta al gennaio 1970, che sembra una data plausibile e supera la revisione.
Come leggere il risultato
- Una data del 1º gennaio 1970 in produzione significa quasi sempre che al formattatore è arrivato un valore nullo o zero anziché una marca temporale reale. L'epoca è il valore predefinito di un intero non inizializzato, ed è per questo che quella data compare così spesso nelle segnalazioni di bug.
- Le marche temporali negative sono del tutto valide e rappresentano date anteriori al 1970: −86.400 è il 31 dicembre 1969. I sistemi che le rifiutano non possono conservare date storiche, il che è un limite reale e non una misura di sicurezza.
- La marca temporale in sé non porta alcun fuso orario; è un conteggio assoluto di secondi. Il fuso entra solo alla formattazione, ed è per questo che lo stesso valore appare come due date di calendario diverse per due utenti e perché salvare l'ora locale anziché una marca temporale crea tanti problemi.
- Il tempo Unix ignora per definizione i secondi intercalari, ripetendo o allungando un secondo anziché contarlo. Non è quindi un conteggio autentico di secondi SI trascorsi, il che conta per la misura precisa degli intervalli e quasi mai per altro.
Domande frequenti
- Perché la mia data compare come 1970?
- Perché il valore arrivato al formattatore era zero o nullo, e zero è l'epoca. Raramente è un bug di formattazione: la marca temporale non è mai stata impostata, oppure si è persa più a monte, e il 1º gennaio 1970 è l'aspetto che ha un intero non impostato una volta reso.
- Come distinguo i secondi dai millisecondi?
- Conta le cifre. Le marche temporali attuali hanno 10 cifre in secondi e 13 in millisecondi. Trattare i secondi come millisecondi è l'errore da cui vale la pena difendersi, perché produce una data dei primi del 1970 che sembra reale anziché palesemente assurda.