I sette errori che producono una data sbagliata
Un convertitore epoch fa aritmetica semplice, quindi quando l'output è sbagliato la causa non è quasi mai la matematica — è l'input. Un timestamp non porta un'etichetta che dica se è in secondi o millisecondi, in UTC o locale, o quanto è preciso, e ogni conversione errata nasce dall'indovinare male uno di questi punti. L'indizio più rapido è l'anno risultante: una data vicina al 1970 o a migliaia di anni nel futuro è una confusione di unità, e una data corretta ma sfasata di un numero tondo di ore è un errore di fuso. La tabella sottostante è la guida pratica; le sezioni successive spiegano in dettaglio gli errori di unità e di fuso e mostrano come verificare una conversione nel codice.
| Errore | Cosa vedi | Causa | Correzione |
|---|---|---|---|
| Secondi letti come millisecondi | La data finisce nel 1970 | Date e Date.now() di JS si aspettano ms; hai passato secondi a 10 cifre | Moltiplicare i secondi per 1000 |
| Millisecondi letti come secondi | Data a migliaia di anni nel futuro | Valore a 13 cifre passato a una funzione in secondi | Dividere prima per 1000 |
| UTC mostrato come ora locale | Giorno giusto, orologio sfasato del tuo offset | Il convertitore ha scelto di default un altro fuso | Impostare il convertitore su UTC |
| Ora locale copiata senza il suo offset | Sfasata di ore su un'altra macchina | Un'ora da orologio a muro salvata senza fuso | Salvare l'UTC più il fuso orario |
| Ora a muro ambigua (ora legale) | Sfasata di esattamente un'ora vicino a un cambio | Un'ora locale che si verifica due volte o mai | Convertire dall'UTC; fissare il fuso IANA |
| Micro/nanosecondi letti come secondi | Data lontana nel futuro (16 o 19 cifre) | Valore di database o di tracing in µs o ns | Dividere per 1.000.000 (µs) o 1.000.000.000 (ns) |
| Fidarsi della precisione mostrata | Parte sub-secondo scartata silenziosamente | Il convertitore ha troncato i millisecondi | Confermare l'unità documentata dall'API di destinazione |
Cosa fa un convertitore epoch
Un convertitore epoch trasforma i timestamp numerici in date leggibili e riconverte le date umane in timestamp epoch. Uno buono gestisce secondi Unix, millisecondi Unix, output UTC, output in fuso locale e stringhe ISO 8601, e rende evidente l'unità prima che tu copi un valore in codice, in un database o in una richiesta API. Convertitore epoch, convertitore di tempo Unix, convertitore di timestamp Unix e calcolatore di epoch Unix descrivono lo stesso lavoro: tradurre tra un conteggio di secondi (o millisecondi) dal 1° gennaio 1970 UTC e una data che un umano possa leggere. Il convertitore è raramente il problema — di solito lo è l'input.
Gli errori di unità: secondi, millisecondi, micro, nano
L'errore di conversione di gran lunga più comune è una confusione di unità, e ha una firma: la data finisce nel 1970, o a migliaia di anni. JavaScript è dove morde più spesso, perché sia il costruttore Date sia Date.now() lavorano in millisecondi mentre la maggior parte delle API, dei database e il comando Unix date lavorano in secondi. Passa un valore in secondi a 10 cifre a new Date() senza moltiplicare per 1000 e atterri 53 anni troppo presto. Al contrario — dare millisecondi a 13 cifre a una funzione in secondi — scaglia la data lontano nel futuro. Le sorgenti a precisione maggiore peggiorano le cose: i database emettono spesso microsecondi a 16 cifre e i sistemi di tracing nanosecondi a 19 cifre, ed entrambi sembrano un valore Unix valido finché non si decodificano nel millennio sbagliato.
- 10 cifre → secondi (es. 1700000000); 13 → millisecondi; 16 → microsecondi; 19 → nanosecondi
- JavaScript: new Date(seconds * 1000), oppure new Date(ms) direttamente
- Microsecondi → dividere per 1.000.000 prima di convertire; nanosecondi → per 1.000.000.000
- Verifica di buon senso: il risultato deve essere una data plausibile nel decennio attuale
Gli errori di fuso orario: UTC vs locale e ora legale
Una volta corretta l'unità, gli errori restanti sono errori di fuso, e anche loro condividono una firma: la data è corretta ma l'orologio è sfasato di un numero intero di ore. Un timestamp Unix è un singolo istante senza fuso proprio; l'offset viene applicato solo quando l'istante viene formattato. Quindi due convertitori impostati su fusi diversi mostrano orari diversi per lo stesso numero — nessuno sbaglia, mostrano semplicemente viste locali diverse. La trappola è copiare un'ora locale da orologio a muro senza annotare da quale fuso proviene, o convertire un'ora che cade su un cambio di ora legale, dove un'ora locale può verificarsi due volte o mai. Quando un risultato è sfasato di esattamente un'ora, sospetta dell'ora legale prima di sospettare del convertitore.
- Confrontare i valori in UTC; applicare un fuso locale solo nel momento in cui li mostri
- Non salvare mai un'ora locale senza salvare anche il suo fuso IANA o offset UTC
- Intorno a un cambio di ora legale, derivare l'istante dall'UTC, non da un'ora locale ambigua
Scegli prima la direzione
La maggior parte delle attività con i timestamp va in una di due direzioni: da epoch a data, o da data a epoch. Decidere prima la direzione previene la causa più comune di dati di test errati e payload API rotti — convertire il valore giusto nel verso sbagliato.
- Da epoch a data: incolla 1700000000 e leggi la data UTC o locale
- Da data a epoch: scegli 2026-01-01 00:00:00 UTC e ottieni 1767225600
- Conferma se la destinazione si aspetta secondi o millisecondi prima di copiare il risultato
Cosa verificare prima di copiare un valore convertito
Un convertitore può essere corretto solo quanto l'input è inequivocabile. Prima di copiare un timestamp in un test, un cron, una migrazione o una richiesta API, conferma l'unità, il fuso e la precisione attesa. La verifica di buon senso più rapida è l'anno risultante: una data vicina al 1970 o lontana nel futuro segnala quasi sempre una confusione di unità più che un errore del convertitore.
- Il sistema ricevente si aspetta secondi o millisecondi?
- La data mostrata è in UTC o in ora locale?
- Il timestamp rappresenta un istante o una data di calendario locale?
- La colonna del database memorizza datetime nativo, secondi Unix o millisecondi Unix?
- Il risultato è vicino al 1970 o lontano nel futuro, cosa che di solito segnala una confusione di unità?
Verificare una conversione nel codice
Quando un valore convertito conta — una migrazione, un confine di fatturazione, una pianificazione cron — non fidarti di un solo strumento. Ricava di nuovo lo stesso istante nel tuo runtime e verifica che i due concordino in UTC. Ognuna di queste righe stampa una stringa ISO 8601 inequivocabile con suffisso Z, quindi non c'è alcuna congettura sul fuso locale da confrontare.
- JavaScript: new Date(1700000000 * 1000).toISOString() // '2023-11-14T22:13:20.000Z'
- Python: datetime.fromtimestamp(1700000000, tz=timezone.utc).isoformat()
- Shell (GNU): date -u -d @1700000000 +'%Y-%m-%dT%H:%M:%SZ'
- Se lo strumento e il tuo runtime non concordano, il sospetto è l'unità o il fuso dell'input — non il convertitore
Esempio pratico: un istante, tre rappresentazioni
Prendi l'istante 2026-01-01 00:00:00 UTC. Come secondi Unix è 1767225600; come millisecondi Unix è 1767225600000; come ISO 8601 è 2026-01-01T00:00:00Z. Tutti e tre descrivono lo stesso momento — cambiano solo formato e unità. L'istante non porta mai un fuso proprio; New York mostrerebbe lo stesso valore come 2025-12-31 19:00:00, perché l'offset viene applicato al momento della visualizzazione, non memorizzato nel numero.
Articoli correlati
FAQ
- Perché la mia data convertita finisce nel 1970?
- Quasi sempre perché i secondi sono stati letti come millisecondi. Date e Date.now() di JavaScript usano i millisecondi, quindi passare un valore in secondi a 10 cifre finisce a gennaio 1970. Moltiplica prima i secondi per 1000.
- Perché la mia ora convertita è sfasata di esattamente un'ora?
- È un errore di fuso orario o di ora legale, non un errore di calcolo. Il convertitore ha applicato un fuso diverso, o l'ora locale è caduta su un cambio di ora legale. Imposta il convertitore su UTC per vedere l'istante canonico, poi applica il fuso che vuoi davvero.
- Qual è il miglior formato del convertitore epoch da copiare?
- Per il codice, copia secondi o millisecondi Unix in base a ciò che documenta l'API di destinazione. Per gli umani, copia ISO 8601 con una Z o un offset di fuso esplicito affinché l'istante sia inequivocabile.
- Un convertitore epoch è la stessa cosa di un convertitore di tempo Unix?
- Per la maggior parte delle ricerche degli sviluppatori, sì. Convertitore epoch, convertitore di tempo Unix, convertitore di timestamp Unix e calcolatore di epoch Unix convertono tutti tra timestamp di epoch Unix e date leggibili.
- Perché i convertitori epoch mostrano orari locali diversi?
- Applicano fusi diversi. L'istante UTC sottostante è identico; cambia solo la visualizzazione locale. Imposta il convertitore su UTC per confrontare il valore canonico.
- Come faccio a sapere se il mio numero è in secondi o in millisecondi?
- Conta le cifre. Un valore moderno a 10 cifre è in secondi Unix; uno a 13 cifre è in millisecondi Unix. Se un valore a 10 cifre finisce vicino al 1970 in JavaScript, è stato trattato come millisecondi e va moltiplicato per 1000.