Convertitore di timestamp Unix

Converti un timestamp Unix in una data leggibile in qualsiasi fuso orario, e una data di nuovo in epoch.

Tempo Unix corrente
Rilevamento…
Input

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.