Deutsch

Entwicklertools · Unix-Zeitstempelkonverter

ISO 8601 vs. RFC 3339: die beiden Datumsformate hinter Ihren API-Antworten

· Hintergrund

Zeitstempel iso-8601 API

Ein breiter Trichter im Datums-/Uhrzeitformat, der sich auf einen API-Vertrag beschränkt
Original-ToolAcre-Vektorillustration

Die meisten APIs behaupten, ISO 8601 zu verwenden, und verwenden tatsächlich RFC 3339, ein strengeres Profil, das für das Internet entwickelt wurde. In diesem Beitrag werden die beiden Dokumente, ihre Unterschiede und ihre Beziehung zu Epochen-Ganzzahlen erläutert.

Das Feld „ISO 8601“, das gültige ISO 8601 ablehnt – ein Wochendatum oder ein Wert mit reduzierter Genauigkeit, der an eine API gesendet wird, die RFC 3339 erwartet

Ein API-Feld, das salopp als „ISO 8601“ beschrieben wird, akzeptiert möglicherweise nur eine Datums-/Uhrzeitform. Das Senden einer anderen standardgültigen Darstellung kann immer noch zum Scheitern des Parsers führen. Die Abhilfe besteht nicht darin, vom Dachnamen aus zu argumentieren; Es geht darum, die genaue Wire-Grammatik mit Beispielen und Validierungstests zu dokumentieren.

ToolAcre liefert eine stabile kanonische Ausgabe von `Date.toISOString()`, es handelt sich jedoch nicht um eine Konformitätssuite für jede Darstellung. Behandeln Sie die generierte Zeichenfolge als eine nützliche Austauschform und vergleichen Sie sie mit dem API-Vertrag, den Sie tatsächlich besitzen.

Ein Schema sollte daher einen regulären Ausdruck oder einen formalen Typ nur dann veröffentlichen, wenn er den Parser genau widerspiegelt. Beispiele allein sind nützlich, aber explizite Ablehnungsfälle schließen Unklarheiten aus.

Ein breiter Datumsstandard und eine enge API-Grammatik sind nicht austauschbar

Das generierte Formular enthält das Kalenderdatum, `T`, die Zeit in Millisekunden und ein nachgestelltes Z. Die Implementierung nennt es ISO 8601 (UTC) in der Benutzeroberfläche. Input akzeptiert, was JavaScript Date liest, einschließlich eines expliziten Offsets und der zonenlosen Datums-/Uhrzeitform des lokalen Pickers.

Dieses Verhalten ist viel enger als ein vollständiger Standardparser. Für Wochendaten, Intervalle, Dauer und reduzierte Präzision gibt es keine Repository-Tests. Eine von einem Browser akzeptierte Zeichenfolge ist dadurch nicht sprachübergreifend garantiert, und eine abgelehnte spezielle Form widerlegt nicht ihre Gültigkeit an anderer Stelle.

Die feste Millisekundengenauigkeit der Ausgabe ist eine Formatierungsauswahl und kein Beweis dafür, dass die Quelle Millisekunden gemessen hat. Das Datum hat möglicherweise einen Ganzsekundenwert erhalten und gibt immer noch `.000` aus.

ToolAcre gibt eine ISO-förmige Form aus; Es validiert nicht den vollständigen ISO-Standard 8601

Die Arbeitsmappe charakterisierte RFC 3339, sein Jahr und obligatorische Offset-Regeln. Im Quellsatz ist kein RFC-Text oder dedizierter Parser vorhanden, daher werden diese Angaben nicht bestätigt. Der Autorenvertrag sieht vor, dass nicht unterstützte Präzision weggelassen wird, anstatt einen Titel aus dem Gedächtnis zu zitieren.

Wenn Ihre API RFC 3339 bedeutet, benennen Sie sie im Schema und testen Sie sie anhand einer Implementierung, die auf der tatsächlichen Spezifikation basiert. ToolAcre kann zum Vergleich eine bekannte Epoche mit seiner UTC-ISO-Ausgabe verbinden, kann jedoch nicht bestätigen, dass beliebige Eingaben dieses Profil erfüllen.

Hierbei handelt es sich um eine redaktionelle und technische Schutzmaßnahme: Standardprofile sind präzise Verträge, deren Umschreibung ohne Text das Risiko birgt, dass sich die Anforderungen in der Dokumentation ändern.

RFC 3339-Anforderungen erfordern eine externe Standardquelle, die in diesem Repository nicht vorhanden ist

Ansprüche zu alternativen Trennzeichen, Kleinbuchstabenbezeichnern und `−00:00` hängen von der genauen Standardsprache ab. Sie werden hier weggelassen. Der Zonendetektor des Konverters erkennt das nachgestellte Z oder den numerischen Wert `±HH:MM` und kennzeichnet zonenlose Datums- und Uhrzeitangaben als lokal; Das ist die Grenze, die wir überprüfen können.

Erstellen Sie eine API-Validierung aus explizit akzeptierten Beispielen und Ablehnungsfällen. Leiten Sie die Erlaubnis nicht vom Convenience-Parser von JavaScript Date ab. Ein permissiver Browser kann Eingaben normalisieren, die ein strenger Server korrekt ablehnt, und so Interoperabilitätsmängel während manueller Tests verbergen.

Ein dedizierter, standardbewusster Parser sollte strukturierte Fehlergründe zurückgeben. Wenn Date die breite Eingabe normalisiert, kann ein API-Validierungsfehler zu einer späteren plattformübergreifenden Diskrepanz führen.

Spezifische Trennzeichen- und unbekannte Offset-Regeln werden ohne den Standardtext weggelassen

Epochenwerte machen Arithmetik und Ordnung kompakt, wenn Einheit und Ursprung festgelegt sind. Datums-/Zeitangaben in Textform machen eine UTC- oder Offset-Messung für Menschen sichtbar und bewahren diesen Bezeichner während der Übertragung. Viele APIs wählen eine kanonische Zeichenfolge, um Mehrdeutigkeiten bei JavaScript-Ganzzahlen oder -Einheiten zu vermeiden.

Wenn eine API beides trägt, definieren Sie, welches Feld maßgeblich ist, und testen Sie die Vereinbarung. Eine veraltete formatierte Zeichenfolge neben einer neuen Epoche ist schlimmer als beide allein. ToolAcre kann das Paar vergleichen, indem es die Ganzzahl umwandelt und den generierten ISO-Wert überprüft, aber die Durchsetzung der Konsistenz obliegt dem Produzenten.

Arbeitsbeispiel: ein Zeitpunkt, vier Darstellungen – Epochensekunden, Epochenmillisekunden, eine RFC-Zeichenfolge 3339 in UTC und eine mit einem lokalen Offset

Verwenden Sie sofort `2025-02-03T10:22:00.000Z`. Seine Epochenformen sind 1,738,578,120 Sekunden und 1,738,578,120,000 Millisekunden. Ein expliziter Offset-Wert ist `2025-02-03T12:22:00+02:00`; Beim Parsen in ToolAcre werden dieselbe Epoche und dieselbe kanonische UTC-ISO-Zeile zurückgegeben.

Dies sind vier im Repository überprüfbare Darstellungen: Sekunden, Millisekunden, toISOString-Ausgabe und eine nach Datum analysierte Zeichenfolge mit numerischem Offset. Das Beispiel behauptet nicht, dass jeder externe Parser die gleiche Bruchgenauigkeit oder Offset-Syntax akzeptiert. Führen Sie vor dem Versand die eigene Validierung der API durch.

Das Subtrahieren des Offsets +02:00 vom geschriebenen Takt ergibt 10:22 UTC. Diese einfache Gleichheit reicht aus, um diese spezielle Eingabe zu testen, ohne eine vollständige Standardgrammatik zu verallgemeinern.

Bearbeitetes Beispiel: ein Moment in den vier Formen, die dieses Repository überprüfen kann

HTTP-Header und E-Mail-Daten verwenden Textverträge, die hier nicht implementiert sind. ToolAcre formatiert diese Protokolle nicht und verspricht auch nicht, dass die ISO-Ausgabe ersetzt werden kann. Der Zeitpunkt eines Zeitstempels kann derselbe sein, während die erforderliche Drahtdarstellung unterschiedlich ist.

Behalten Sie die Protokollserialisierung in dedizierten Adaptern mit Vorrichtungen bei, die aus maßgeblichen Spezifikationen kopiert wurden. Verwenden Sie die Epochenkonvertierung, um den zugrunde liegenden Zeitpunkt zu überprüfen, und testen Sie dann die Grammatik separat. Dadurch wird verhindert, dass ein kalenderrichtiger Wert die Prüfung in einem syntaktisch ungültigen Umschlag besteht.

Der dedizierte Adapter sollte auch bewahren, ob ein fehlender oder unbekannter Offset eine Domänenbedeutung hat. Das Reduzieren jedes Textdatums auf eine lokale Annahme kann diese Informationen zerstören.

Andere Textprotokolle bleiben außerhalb des Konverters

Geben Sie das schmale Format an, das Ihre API akzeptiert, anstatt sich auf eine breite Bezeichnung zu verlassen. Für dieses Tool ist die sicherste reproduzierbare Ausgabe die von `toISOString()` zurückgegebene UTC-ISO-Zeichenfolge, und die sicherste numerische Eingabe umfasst einen expliziten Sekunden- oder Millisekundenvertrag.

ToolAcre überbrückt diese Formulare und meldet Annahmen. Es werden nicht alle ISO-8601- oder RFC-3339-Randfälle beurteilt. Der eindeutige Besitz von Grammatik-, Einheiten- und Zonenbezeichnern macht Zeitstempel portierbar – ohne dass einem unterspezifizierten Feld ein bekannter Standardname hinzugefügt wird.

Ein präziser Vertrag ermöglicht es Kunden, frühzeitig mit nützlichen Nachrichten zu scheitern. Eine breite Bezeichnung verschiebt Meinungsverschiedenheiten in die Laufzeit, wo zwei ansonsten korrekte Parser unterschiedliche Teilmengen auswählen können.