Strumenti per sviluppatori · Convertitore di timestamp Unix
Timestamp Unix negativi: come vengono rappresentate le date precedenti a 1970
· Come funziona
timestamp tempo Unix formati di dati
Il tempo Unix conta in avanti da 1970, ma conta anche all'indietro. Questo post spiega cosa significa un'epoca negativa, come −1 diventa l'ultimo secondo di 1969 e dove i sistemi che assumono valori positivi si rompono.
Una data di nascita con un segno meno: un utente nato in 1965 memorizzato come numero intero negativo e il codice che lo ha trattato come un errore
Un record per una persona nata prima di 1970 può legittimamente contenere un timestamp Unix negativo. Rifiutare ogni segno meno iniziale converte una scelta di rappresentazione in un bug di perdita di dati. Il parser di ToolAcre accetta un segno facoltativo e `fromEpoch` contrassegna un valore interpretato in millisecondi inferiore a zero come `beforeEpoch` anziché trattarlo come non valido.
Il display poi aggiunge una nota che spiega che l'istante precede l'epoca Unix. Questo è più efficace del rendering silenzioso di una data perché mantiene visibile il segno insolito al revisore. Se uno schema upstream vieta gli aspetti negativi, il fallimento appartiene a quello schema o migrazione, non all'aritmetica che mappa i conteggi su entrambi i lati dello zero.
Interi con segno e epoca: perché time_t è con segno e a cosa corrispondono −1 e −86400
Lo zero è 1970-01-01T00:00:00.000Z. I test del repository dimostrano che −1 secondo è l'istante immediatamente precedente, `1969-12-31T23:59:59.000Z`. Allo stesso modo, −86,400 secondi è un POSIX giorno fisso prima dello zero. L'aritmetica con segno rende l'asse continuo invece di richiedere una seconda epoca per i record più vecchi.
La struttura attribuiva l'archiviazione firmata a `time_t`, ma questo codice non stabilisce la cronologia della progettazione o il tipo utilizzato da ogni piattaforma. Le sue prove più ristrette sono sufficienti: i numeri JavaScript possono essere negativi, il rilevamento utilizza la magnitudine assoluta e Date può formattare il risultato. Descrivi il tipo dichiarato del campo produttivo separatamente dall'input accettato dal convertitore.
Aritmetica dell'epoca con segno intorno allo zero, senza pretendere perché ogni volta ne scegliesse il tipo
I valori negativi mantengono la stessa distinzione di unità di quelli positivi. `−1000` secondi punta 1,000 secondi prima dell'epoca, mentre `−1000` millisecondi punta solo un secondo prima di essa. Il rilevamento automatico considera entrambi come secondi perché la loro grandezza è inferiore a 10¹¹, quindi un breve conteggio dei millisecondi pre-epoca richiede la selezione esplicita dei millisecondi.
Questo è un fallimento concreto del folklore del conteggio delle cifre. Uno sviluppatore che vede un segno meno e quattro cifre non può dedurre l'unità dall'apparenza. Utilizza il contratto di origine, scegli il selettore e controlla la nota dell'unità. La regola di grandezza di ToolAcre è un'impostazione predefinita per i dati tipici, non una sostituzione per i metadati su valori storici vicini a 1970.
Dove i valori negativi falliscono: sistemi che utilizzano −1 come sentinella, archiviazione non firmata, selettori di date che bloccano e linguaggi che li rifiutano
All'esterno del convertitore, `−1` è talvolta riservato come sentinella dei valori mancanti e una colonna senza segno non può preservare alcun istante negativo. Queste sono possibilità di progettazione comuni, ma il repository non può certificare il comportamento di un particolare database, selettore di date o linguaggio. Testare il confine effettivo prima di spostarvi le date di archivio.
Una sonda utile contiene tre valori: null o il marcatore mancante documentato, −1, e una data chiaramente più vecchia. Se −1 scompare mentre sopravvive il valore più vecchio, è implicata la gestione della sentinella; se tutti i negativi falliscono, controlla il tipo e la convalida. Non “risolvere” il sintomo aggiungendo 1970 anni o prendendo un valore assoluto, perché entrambi creano istanti diversi.
Esempio realizzato: conversione di −14182940 — l'aritmetica in una data di luglio 1969 in UTC e in una zona locale a ovest di Greenwich
Per −14,182,940 secondi, inizia dall'epoca e vai indietro di 164 completa 86,400 secondi giorni, lasciando 13,340 secondi. Il resto è di 3 ore, 42 minuti e 20 secondi. La lettura UTC risultante è `1969-07-20T20:17:40.000Z`, un istante scelto qui appositamente per questo articolo.
Una lettura locale a ovest di UTC potrebbe mostrare un'ora precedente o anche un'altra data, ma il risultato esatto dipende dalla zona del browser e dalle regole internazionali. Leggilo dal panel piuttosto che pubblicare una risposta universale. La verifica fissa è la riga ISO; la riga locale è un'annotazione ambientale sullo stesso conteggio negativo.
Esempio realizzato: conversione di −14,182,940 con l'aritmetica verificabile UTC
ToolAcre controlla il suo valore interpretato rispetto a ±8.64×10¹⁵ millisecondi, l'intervallo di date indicato nell'origine. Dimostra anche la conversione di −2,208,988,800 secondi in `1900-01-01T00:00:00.000Z`. Questi fatti mostrano che il percorso arriva ben prima di 1970 senza implicare che ogni sistema di stoccaggio possa trasportare la stessa autonomia.
Un campo firmato 32 bit ha un intervallo matematico più stretto rispetto a JavaScript Data, ma il convertitore non controlla la larghezza del campo quando si incolla un numero. Conserva il tipo di origine in un controllo. Una conversione riuscita del browser dimostra rappresentabilità in questo caso, non un'andata e ritorno sicura attraverso firmware, colonne SQL o protocolli binari altrove.
L'intervallo di date del convertitore è noto; i limiti esterni di 32 bit dipendono dal tipo di archiviazione
Trasformare un conteggio in una data JavaScript non ricostruisce il calendario civile effettivamente stampato in ogni luogo secoli fa. L'implementazione utilizza il modello di data della piattaforma e restituisce una rappresentazione ISO; non contiene alcun selettore di calendario storico, archivio locale o fonte documentaria per le riforme del calendario. Tali affermazioni sono intenzionalmente assenti.
Per i moderni record software, la rappresentazione prolettica della macchina potrebbe ancora essere esattamente il contratto di cui hai bisogno. Per la genealogia, la storia giuridica o la trascrizione archivistica, conservare la data scritta originale e il relativo contesto calendariale accanto a qualsiasi epoca derivata. Un numero ordinabile conveniente non dovrebbe cancellare l’incertezza che la conversione non può risolvere.
Le affermazioni sulla cronologia del calendario non rientrano nelle prove di questo convertitore
Il negativo è una direzione sull'asse delle epoche, non una categoria di errore. ToolAcre lo analizza, applica le stesse regole dei secondi o dei millisecondi in base alla grandezza e contrassegna il risultato come prima dell'epoca. Questo comportamento consente a un revisore di distinguere un vecchio istante legittimo da un errore sentinella o di archiviazione non firmato altrove.
Quando si controllano i dati pre-1970, indicare l'unità, il tipo di origine e la convenzione sui valori mancanti prima di interpretare il segno. Quindi confronta il risultato ISO con un record noto. Solo il segno è un'aritmetica significativa; lo schema circostante determina se il produttore intendeva quell'aritmetica o utilizzava lo stesso numero come valore di controllo.