Entwicklertools · Unix-Zeitstempelkonverter
Negative Unix-Zeitstempel: wie Datumsangaben vor 1970 dargestellt werden
· Wie es funktioniert
Zeitstempel Unix-Zeit Datenformate
Die Unix-Zeit zählt ab 1970 vorwärts, aber auch rückwärts. In diesem Beitrag wird erklärt, was eine negative Epoche bedeutet, wie −1 zur letzten Sekunde von 1969 wird und wo Systeme, die positive Werte annehmen, zusammenbrechen.
Ein Geburtsdatum mit einem Minuszeichen – ein in 1965 geborener Benutzer, gespeichert als negative Ganzzahl, und der Code, der es als Fehler behandelte
Ein Datensatz für eine Person, die vor 1970 geboren wurde, kann berechtigterweise einen negativen Unix-Zeitstempel enthalten. Das Ablehnen jedes führenden Minuszeichens wandelt eine Darstellungsauswahl in einen Datenverlustfehler um. Der Parser von ToolAcre akzeptiert ein optionales Vorzeichen und `fromEpoch` markiert einen interpretierten Millisekundenwert unter Null als `beforeEpoch`, anstatt ihn als ungültig zu behandeln.
Die Anzeige fügt dann einen Hinweis hinzu, der erklärt, dass der Zeitpunkt vor der Unix-Epoche liegt. Dies ist wirksamer als die stille Angabe eines Datums, da das ungewöhnliche Zeichen dadurch für den Prüfer sichtbar bleibt. Wenn ein Upstream-Schema Negative verbietet, liegt der Fehler an diesem Schema oder dieser Migration und nicht an der Arithmetik, die Zählungen auf beiden Seiten von Null zuordnet.
Vorzeichenbehaftete Ganzzahlen und die Epoche – warum time_t vorzeichenbehaftet ist und was −1 und −86400 entspricht
Null ist 1970-01-01T00:00:00.000Z. Die Repository-Tests beweisen, dass −1 Sekunde der unmittelbar vorhergehende Zeitpunkt ist, `1969-12-31T23:59:59.000Z`. Ebenso ist −86,400 Sekunden ein fester POSIX-Tag vor Null. Vorzeichenbehaftete Arithmetik macht die Achse kontinuierlich, anstatt für ältere Datensätze eine zweite Epoche zu erfordern.
Die Gliederung ordnete signierten Speicher `time_t` zu, aber dieser Code legt nicht den Entwurfsverlauf oder Typ fest, der von jeder Plattform verwendet wird. Sein engerer Beweis reicht aus: JavaScript-Zahlen können negativ sein, die Erkennung verwendet die absolute Größe und Date kann das Ergebnis formatieren. Beschreiben Sie den deklarierten Typ des produzierenden Felds getrennt von der akzeptierten Eingabe des Konverters.
Vorzeichenbehaftete Epochenarithmetik um Null, ohne anzugeben, warum jedes time_t seinen Typ wählte
Negative Werte behalten die gleiche Einheitenunterscheidung wie positive. `−1000` Sekunden zeigen 1,000 Sekunden vor der Epoche, während `−1000` Millisekunden nur eine Sekunde davor zeigen. Die automatische Erkennung behandelt beide als Sekunden, da ihre Größe unter 10¹¹ liegt. Daher erfordert eine kurze Millisekundenzählung vor der Epoche die explizite Millisekundenauswahl.
Dies ist ein konkretes Versagen der Folklore der Ziffernzählung. Ein Entwickler, der ein Minuszeichen und vier Ziffern sieht, kann aus dem Aussehen nicht auf die Einheit schließen. Verwenden Sie den Quellvertrag, wählen Sie den Selektor und überprüfen Sie die Einheitsnotiz. Die Größenregel von ToolAcre ist ein Standardwert für typische Daten und kein Ersatz für Metadaten zu historischen Werten nahe 1970.
Wo negative Werte versagen – Systeme, die −1 als Wächter verwenden, unsignierter Speicher, Datumswähler, die klemmen, und Sprachen, die sie ablehnen
Außerhalb des Konverters wird `−1` manchmal als Sentinel für fehlende Werte reserviert, und eine vorzeichenlose Spalte kann keinen negativen Zeitpunkt beibehalten. Dies sind gängige Designmöglichkeiten, aber das Repository kann nicht zertifizieren, wie sich eine bestimmte Datenbank, Datumsauswahl oder Sprache verhält. Testen Sie die tatsächliche Grenze, bevor Sie Archivdaten darüber verschieben.
Eine nützliche Sonde enthält drei Werte: null oder den dokumentierten fehlenden Marker, −1 und ein deutlich älteres Datum. Wenn −1 verschwindet, während der ältere Wert erhalten bleibt, ist die Sentinel-Behandlung betroffen; Wenn alle Negative fehlschlagen, prüfen Sie den Typ und die Validierung. Beheben Sie das Symptom nicht, indem Sie 1970 Jahre hinzufügen oder einen absoluten Wert annehmen, da beides unterschiedliche Zeitpunkte erzeugt.
Arbeitsbeispiel: Konvertieren von −14182940 – der Arithmetik in ein 1969-Datum im Juli in UTC und in einer lokalen Zone westlich von Greenwich
Für −14,182,940 Sekunden beginnen Sie bei der Epoche und bewegen sich rückwärts. 164 schließen 86,400-Sekunden-Tage ab, so dass 13,340 Sekunden übrig bleiben. Der Rest beträgt 3 Stunden, 42 Minuten und 20 Sekunden. Der resultierende UTC-Wert ist `1969-07-20T20:17:40.000Z`, ein Zeitpunkt, der hier speziell für diesen Artikel ausgewählt wurde.
Eine lokale Anzeige westlich von UTC zeigt möglicherweise eine frühere Uhrzeit oder sogar ein anderes Datum an, das genaue Ergebnis hängt jedoch von der Browserzone und den Intl-Regeln ab. Lesen Sie es aus dem Panel, anstatt eine universelle Antwort zu veröffentlichen. Die feste Verifizierung ist die ISO-Zeile; Die lokale Zeile ist eine Umgebungsanmerkung zu derselben negativen Anzahl.
Arbeitsbeispiel: Konvertieren von −14,182,940 mit überprüfbarer UTC-Arithmetik
ToolAcre prüft seinen interpretierten Wert anhand von ±8.64×10¹⁵ Millisekunden, dem in der Quelle angegebenen Datumsbereich. Es beweist auch die Konvertierung von −2,208,988,800 Sekunden in `1900-01-01T00:00:00.000Z`. Diese Fakten zeigen, dass die Route weit vor 1970 reicht, ohne dass impliziert wird, dass jedes Speichersystem die gleiche Reichweite haben kann.
Ein vorzeichenbehaftetes 32-Bit-Feld hat ein engeres mathematisches Intervall als JavaScript-Datum, aber der Konverter überprüft die Feldbreite nicht, wenn Sie eine Zahl einfügen. Behalten Sie den Quelltyp in einer Prüfung bei. Eine erfolgreiche Browserkonvertierung demonstriert hier die Repräsentierbarkeit, nicht jedoch sicheres Roundtripping durch Firmware, SQL-Spalten oder Binärprotokolle an anderer Stelle.
Der Datumsbereich des Konverters ist bekannt. Externe 32-Bit-Grenzwerte hängen von ihrem Speichertyp ab
Das Umwandeln einer Zählung in ein JavaScript-Datum rekonstruiert nicht den Zivilkalender, der vor Jahrhunderten tatsächlich an jedem Ort gedruckt wurde. Die Implementierung verwendet das Datumsmodell der Plattform und gibt eine ISO-Darstellung zurück; Es enthält keinen historischen Kalenderselektor, kein Gebietsschemaarchiv oder eine Dokumentationsquelle für Kalenderreformen. Diese Behauptungen fehlen bewusst.
Für moderne Software-Datensätze ist die proleptische Maschinendarstellung möglicherweise immer noch genau der Vertrag, den Sie benötigen. Behalten Sie für Genealogie, Rechtsgeschichte oder Archivtranskription das ursprüngliche schriftliche Datum und seinen Kalenderkontext zusammen mit allen abgeleiteten Epochen bei. Eine praktisch sortierbare Zahl sollte Unsicherheiten nicht beseitigen, die durch Konvertierung nicht gelöst werden können.
Behauptungen über den Kalenderverlauf liegen außerhalb der Beweise dieses Konverters
Negativ ist eine Richtung auf der Epochenachse, keine Fehlerkategorie. ToolAcre analysiert es, wendet die gleichen Sekunden- oder Millisekundenregeln nach Größenordnung an und markiert das Ergebnis als vor der Epoche. Dieses Verhalten ermöglicht es einem Prüfer, einen legitimen alten Instant von einem Sentinel- oder Unsigned-Storage-Fehler an anderer Stelle zu unterscheiden.
Geben Sie bei der Prüfung von Daten vor 1970 die Einheit, den Quelltyp und die Konvention für fehlende Werte an, bevor Sie das Vorzeichen interpretieren. Vergleichen Sie dann das ISO-Ergebnis mit einem bekannten Datensatz. Das Zeichen allein ist eine sinnvolle Arithmetik; Das umgebende Schema bestimmt, ob der Produzent diese Arithmetik beabsichtigte oder dieselbe Zahl als Kontrollwert verwendete.