Convertitore di timestamp Unix
Converti un timestamp Unix in una data leggibile in qualsiasi fuso orario, e una data di nuovo in epoch.
Che cos’è un timestamp Unix
Un timestamp Unix — chiamato anche tempo epoch o tempo POSIX — è un singolo numero che conta quanti secondi sono passati dalle 00:00:00 UTC del 1º gennaio 1970, un istante noto come epoch di Unix. Trattandosi di un solo intero, senza fuso orario, senza calendario e senza formattazione, è il formato a cui i computer ricorrono ogni volta che un istante va memorizzato, ordinato, confrontato o spedito in rete. È ciò che sta dietro la colonna «created_at» del tuo database, dietro i claim «iat» ed «exp» di un JWT, dietro l’mtime di un file e dietro i timestamp di praticamente ogni file di log che ti capiterà di leggere.
Il rovescio della medaglia è che un numero nudo non dice nulla a una persona. 1716197600 è un istante perfettamente valido, ma a colpo d’occhio non sai se sia martedì scorso o tre anni fa. Questa traduzione, in entrambe le direzioni, è ciò che fa questo strumento.
Secondi o millisecondi: l’ambiguità che morde
La convenzione originale di Unix conta secondi interi, ed è quello che ottieni da date +%s in una shell, da time() in PHP e da time.time() in Python una volta troncato. JavaScript, Java e molti altri contano invece millisecondi: Date.now() restituisce un numero mille volte più grande. Entrambi si chiamano «timestamp», e confonderli è uno dei bug sulle date più comuni che esistano.
Il guasto è silenzioso, non rumoroso. Leggi un valore in millisecondi come secondi e la data atterra decine di migliaia di anni nel futuro; leggi un valore in secondi come millisecondi e tutto crolla al gennaio 1970. Nessuno dei due solleva un errore: semplicemente ottieni una data sbagliata che sembra vera.
Questo strumento tira a indovinare in base all’ordine di grandezza del numero e poi ti dice che cosa ha indovinato, proprio accanto al risultato. I secondi epoch di oggi hanno dieci cifre e i millisecondi tredici, quindi la deduzione è quasi sempre corretta — ma «quasi» non basta per un valore che stai per incollare in una segnalazione di bug, ed è per questo che l’interpretazione è sempre visibile e sempre a un clic dall’essere cambiata.
Fusi orari, UTC e perché «locale» è scivoloso
Un timestamp Unix non ha fuso orario. Identifica un istante, e quello stesso istante è contemporaneamente le 09:33 a Londra, le 11:33 a Gerusalemme e le 18:33 a Tokyo. Il fuso orario non fa parte del valore: è la lente attraverso cui lo guardi.
Per questo lo strumento mostra più lenti insieme. UTC è il riferimento neutro su cui concordano tutti i server e tutti i log. La tua ora locale è quella che segnala il tuo dispositivo, mostrata con il nome del fuso (per esempio Europe/Berlin) così sai sempre quale lente l’ha prodotta: il rilevamento avviene nel tuo browser, quindi chi visita da Berlino vede l’ora di Berlino e chi visita da Tokyo quella di Tokyo. La terza riga è un fuso qualsiasi scelto dal database IANA completo, ed è la riga che ti serve quando leggi il log di un server che sta altrove.
- UTC: il riferimento su cui concordano tutti i sistemi, e la cosa giusta da memorizzare e registrare.
- Locale: lo stesso istante come lo vede il tuo dispositivo, etichettato con il fuso rilevato.
- Un fuso a tua scelta: per leggere log e tracce da macchine che stanno altrove.
- ISO 8601: il formato testuale di interscambio, ad es. 2024-05-20T09:33:20.000Z.
- Relativo: «3 ore fa», per farsi un’idea rapida di quanto sia recente qualcosa.
Gli scarti sono mostrati accanto a ogni orario (+03:00, -04:00) perché non sono fissi: la maggior parte dei fusi si sposta di un’ora con l’ora legale, quindi lo stesso fuso può produrre scarti diversi in periodi diversi dell’anno. Una data vicina a un cambio è esattamente il punto in cui i calcoli a mano sbagliano.
Lavorare con il tempo epoch nella pratica
Ogni linguaggio e ogni shell ha il proprio modo di produrre e leggere valori epoch. Questi vale la pena ricordarli:
date +%s # shell: ora corrente in secondi date -d @1716197600 # shell (GNU): da secondi a data Date.now() # JavaScript: ora corrente in MILLIsecondi new Date(1716197600 * 1000) # JavaScript: da secondi a Date time.time() # Python: secondi, come decimale datetime.fromtimestamp(1716197600, tz=timezone.utc) SELECT EXTRACT(EPOCH FROM now()) -- PostgreSQL: secondi
Una regola pratica che evita gran parte dei dolori con le date: memorizza e trasmetti gli istanti in UTC — come intero epoch o come stringa ISO 8601 — e converti in un fuso locale solo all’ultimo momento, quando lo mostri davvero a qualcuno. Formattare troppo presto è il modo in cui un bug di fuso orario finisce cotto dentro i tuoi dati invece di restare nel livello di presentazione.
Un’altra cosa da sapere: un contatore di secondi a 32 bit con segno esaurisce il 19 gennaio 2038, il «problema dell’anno 2038». I sistemi moderni usano valori a 64 bit e non corrono rischi, ma i vecchi dispositivi embedded e le colonne di database ereditate sono proprio i posti in cui potresti ancora incontrarlo.
Domande frequenti
- Come fa a sapere se il mio numero è in secondi o millisecondi?
- Dal suo ordine di grandezza: i valori sotto circa 1e11 sono letti come secondi, quelli maggiori come millisecondi. Oggi questo separa nettamente i secondi a dieci cifre dai millisecondi a tredici. L’interpretazione è mostrata accanto al risultato e puoi cambiarla con un clic, quindi la deduzione non ti viene mai nascosta.
- Quale fuso orario conta come «locale»?
- Quello che segnala il tuo dispositivo, rilevato nel browser e mostrato per nome così da non lasciare dubbi. È il tuo fuso, non quello del sito: chi visita da Berlino vede l’ora di Berlino e chi visita da Tokyo quella di Tokyo.
- Posso riconvertire una data in timestamp?
- Sì. Lo stesso campo accetta entrambe le direzioni: scrivi un numero e ottieni una data, scrivi una data come 2024-05-20 o 2024-05-20T09:33:20Z e ottieni il valore epoch. Non c’è nessuna modalità da cambiare.
- Gestisce le date precedenti al 1970?
- Sì. I timestamp precedenti all’epoch sono semplicemente negativi — -86400 è il 31 dicembre 1969 — e i valori negativi vengono accettati e convertiti normalmente.
- Perché il mio timestamp mostra una data diversa da quella che mi aspettavo?
- Quasi sempre per uno di due motivi: l’interpretazione secondi/millisecondi non è quella che davi per scontata (controlla l’etichetta e cambiala), oppure stai confrontando un valore UTC con un’aspettativa in ora locale. Lo strumento mostra entrambe le righe affiancate così vedi di quale dei due si tratta.
- Che cos’è il problema dell’anno 2038?
- I sistemi che memorizzano i secondi epoch in un intero a 32 bit con segno vanno in overflow il 19 gennaio 2038 e passano a un numero negativo, restituendo date nel 1901. Tutto ciò che usa valori a 64 bit — cioè quasi tutto il moderno — non è interessato, ma i sistemi embedded ereditati e le vecchie colonne di database possono ancora essere a rischio.
- Il timestamp che inserisco viene inviato da qualche parte?
- No. Analisi, conversione e formattazione vengono eseguite interamente nel tuo browser, appoggiandosi al supporto per date e fusi orari della piattaforma stessa. Nulla di ciò che digiti lascia il tuo dispositivo.