Strumenti per sviluppatori · Convertitore di timestamp Unix
Secondi o millisecondi? Distinzione di un'epoca di 10 cifre da un'epoca di 13 cifre
· Come funziona
timestamp tempo Unix flusso di lavoro dello sviluppatore
La maggior parte dei valori delle epoche che incontri oggi sono di dieci cifre (secondi) o di tredici cifre (millisecondi), e indovinare sbagliando fa risalire la data a decine di migliaia di anni. Questo post spiega l'aritmetica alla base del conteggio delle cifre e perché un convertitore dovrebbe indicare l'unità anziché dedurla.
1700000000 o 1700000000000? - lo stesso istante scritto in due modi e il dashboard che mostrava una data nel lontano futuro
Un valore di registro di 1700000000 e un valore di carico utile di 1700000000000 possono descrivere lo stesso istante. Considera il primo come millisecondi e la tua dashboard cade in gennaio 1970; tratta i secondi come secondi e la loro data salta migliaia di anni nel futuro. Un timestamp è solo un conteggio più un'unità e un punto di partenza, quindi una colonna del database denominata create_at senza documentazione ha omesso informazioni essenziali.
Perché il conteggio attuale dei secondi ha dieci cifre: il miliardesimo secondo in 2001, l'intervallo di dieci cifre che va fino a 2286 e cosa significherebbero nove cifre
Il tempo Unix conta i secondi trascorsi da 1970-01-01 00:00:00 UTC secondo la consueta convenzione POSIX. Il contatore ha superato il miliardo in 2001; per le date positive contemporanee sono comunemente dieci cifre decimali. Rimane di dieci cifre finché non raggiunge i dieci miliardi in 2286. Questa è una proprietà della notazione in base dieci, non una regola inserita in una stringa di data ISO. Valori negativi prima dell'epoca e date molto al di fuori del presente invalidano una semplice scorciatoia per il conteggio delle cifre.
Perché i conteggi dei millisecondi sono tredici, un fattore di mille, tre cifre extra e da dove provengono le convenzioni di JavaScript e Java
JavaScript Date.getTime() conta convenzionalmente i millisecondi, moltiplicando il timestamp dei secondi per 1,000. Tre zeri trasformano il conteggio di un secondo corrente di dieci cifre in un conteggio di millisecondi di tredici cifre. Ad esempio 1,700,000,000 secondi diventano 1,700,000,000,000 millisecondi; entrambi sono 2023-11-14T22:13:20.000Z. Un convertitore che si limita a inserire separatori senza indicare l'unità presunta può trasformare un numero valido in una data plausibile ma errata.
Dove le ipotesi falliscono: valori piccoli vicino all'epoca, date precedenti a 2001 e date future in cui il conteggio delle cifre smette di discriminare
L'euristica fallisce vicino a 1970 quando un valore in millisecondi può essere breve, prima di 2001 quando i secondi hanno meno di dieci cifre o con contatori di microsecondi e nanosecondi. Per impostazione predefinita, ToolAcre interpreta le magnitudini inferiori a 10¹¹ come secondi e i valori maggiori come millisecondi ed etichetta l'unità utilizzata. Quella soglia è un'ipotesi pratica, non un decodificatore di formato inequivocabile. Un timestamp fornito da uno specifico API deve essere interpretato utilizzando la documentazione di API anche quando la sua lunghezza è insolita.
Esempio elaborato: tre valori da un registro: 1700000000, 1700000000000 e 1700000000000000, letti in secondi, millisecondi e microsecondi
Tre numeri interi da un registro illustrativo mostrano la trappola. Interpreta 1700000000 come secondi e 1700000000000 come millisecondi: entrambi si risolvono in 2023-11-14T22:13:20Z. Interpreta 1700000000000000 come microsecondi e dividi per un milione per ottenere lo stesso conteggio dei secondi. Il convertitore ToolAcre accetta secondi o millisecondi, non una modalità microsecondi: incollare quel terzo numero senza prima convertirne l'unità non confermerà l'istante previsto. Mantieni sempre insieme il campo grezzo e la sua unità durante il debug.
Perché l'unità dovrebbe essere dichiarata e non indovinata: come il convertitore mostra l'unità applicata in modo che un'ipotesi errata sia visibile anziché silenziosa
Un servizio che invia timestamp deve denominare l'unità nel proprio schema o utilizzare il testo ISO 8601 con un offset esplicito. Se un campo legacy non è documentato, confronta diversi valori con un altro orario di evento affidabile prima di decidere; una singola data plausibile per coincidenza non è una prova sufficiente. Il convertitore mostra quale unità è stata applicata, dandoti la possibilità di individuare un errore del fattore 1,000. Modifica l'unità in modo esplicito e confrontala invece di fare affidamento su un'ipotesi automatica come contratto API a lungo termine.
Ciò che questo non copre: timestamp archiviati come stringhe, testo ISO 8601 o date seriali del foglio di calcolo, che sono problemi diversi
Questo articolo non illustra le date seriali di Excel, le stringhe come 2026-09-28T10:15Z o la formattazione del fuso orario delle letture dell'orologio locale. Queste sono rappresentazioni diverse. I timestamp Unix si riferiscono a un istante; lo stesso istante appare come orari diversi dell'orologio da parete in zone diverse. Anche le convenzioni sui secondi intercalati meritano un trattamento separato e un contatore con segno 32-bit presenta un problema di overflow in 2038 che è distinto dalla domanda secondi contro millisecondi.
Conclusione: conta le cifre, quindi conferma l'unità e come il convertitore di timestamp Unix legge sia i secondi che i millisecondi con l'unità etichettata
Contare le cifre come suggerimento iniziale, quindi confermare l'unità dichiarata dal produttore e almeno un evento noto. Il convertitore di timestamp Unix rende visibile il presupposto applicato secondi/milliseconds e stampa sia UTC che le rappresentazioni locali nel tuo browser. Non lasciare che una data dall'aspetto accurato prevalga sulla documentazione contraria del sistema che ha prodotto il valore.