Das Problem, das ISO 8601 löst
Was bedeutet 03/04/05? In den USA ist es der 4. März 2005. In den meisten Teilen Europas ist es der 3. April 2005. In Japan ist es der 5. April 2003. Diese Art von Mehrdeutigkeit hat zu gescheiterten Verträgen, verpassten Flügen, doppelt bezahlten Rechnungen und mindestens einem berühmten Datenbankmigrationsdebakel geführt. ISO 8601, erstmals 1988 veröffentlicht und zuletzt als ISO 8601-1:2019 und ISO 8601-2:2019 überarbeitet, existiert, um all das zu beenden.
Das Grundformat
Die Hauptregel ist einfach: Daten als JJJJ-MM-TT schreiben, immer mit vierstelliger Jahreszahl, immer mit der größten Einheit zuerst. Das Format sortiert sich korrekt als Zeichenkette und ist der Standard in Datenbanken, Logdateien und Dateinamen.
Uhrzeiten und kombinierte Datum-Zeit-Werte
Uhrzeiten verwenden die 24-Stunden-Notation: HH:MM:SS. Ein kombiniertes Datum mit Uhrzeit verwendet ein wörtliches "T" als Trennzeichen: 2025-01-25T14:30:00. Zeitzoneninformationen werden mit einem "Z" für UTC oder einem vorzeichenbehafteten Offset wie +02:00 angehängt. Ein vollständig qualifizierter Zeitpunkt sieht so aus: 2025-01-25T14:30:00+01:00.
Wochendaten
ISO 8601 definiert auch einen wochenbasierten Kalender, den viele Unternehmen für Geschäftsberichte verwenden. Wochen beginnen am Montag. Woche 1 ist die Woche, die den ersten Donnerstag des Jahres enthält. Ein Wochendatum wird als JJJJ-Www-T geschrieben, z. B. 2025-W04-6. Deshalb haben einige Jahre 52 ISO-Wochen und einige 53.
Ordnungsdaten
Ein selteneres, aber nützliches Format ist das Ordnungsdatum: JJJJ-TTT, wobei TTT der Tag des Jahres von 001 bis 365 (oder 366 in einem Schaltjahr) ist. NASA, Meteorologen und die Luftfahrtindustrie verwenden es häufig.
Dauern und Intervalle
ISO 8601 definiert auch eine Syntax für Dauern. Eine Dauer beginnt mit dem Buchstaben "P" (für "period") und verwendet einbuchstabige Bezeichner. Beispiele:
P1Y— ein JahrP3M— drei MonatePT2H30M— zwei Stunden und dreißig MinutenP1Y2M10DT2H30M— ein Jahr, zwei Monate, zehn Tage, zweieinhalb Stunden
Ein Intervall sind zwei Datum-Zeit-Werte getrennt durch einen Schrägstrich: 2025-01-01T00:00:00Z/2025-12-31T23:59:59Z. Ein wiederkehrendes Intervall wird mit R[n]/ präfixiert.
RFC 3339: das Internet-Profil
Die meisten Internetprotokolle verwenden ISO 8601 nicht direkt. Sie verwenden RFC 3339, eine Spezifikation von 2002 von Graham Klyne und Chris Newman, die eine strikte Teilmenge von ISO 8601 für Internet-Zeitstempel definiert. RFC 3339 ist das, was JSON-APIs, Logdateien, OAuth-Tokens und E-Mail-Header verwenden.
Praktische Tipps für Entwickler
- Speichere Zeitstempel immer in UTC. Konvertiere nur bei der Anzeige in die lokale Zeit.
- Schreibe immer vierstellige Jahre.
- Verwende
JJJJ-MM-TTin Dateinamen; sie sortieren chronologisch ohne Zusatzlogik. - Wenn deine API ein Datum zurückgibt, gib es als ISO-8601-Zeichenkette in UTC zurück, nicht als Unix-Zeitstempel.
- Parse mit einer richtigen Bibliothek. Selbstgeschriebene Regex-Parser scheitern irgendwann.
- Vorsicht mit dem ISO-Wochenjahr.
2024-12-30liegt im ISO-Wochenjahr 2025.
Weiterführende Literatur
- ISO, "ISO 8601-1:2019 Date and time — Representations for information interchange — Part 1: Basic rules" (2019).
- Klyne, G. und Newman, C., "Date and Time on the Internet: Timestamps", IETF RFC 3339 (Juli 2002).