Der Standard ISO 8601 definiert nicht nur ein Datumsformat, sondern auch ein Format zum Schreiben von Dauern — eine Zeichenkette wie PT1H30M, die eindeutig und maschinenlesbar „1 Stunde 30 Minuten" beschreibt.
Der Aufbau des Formats
Die Zeichenkette beginnt immer mit dem Buchstaben P (period). Datumskomponenten (Jahre, Monate, Tage) folgen direkt auf P, während Zeitkomponenten (Stunden, Minuten, Sekunden) nach dem Buchstaben T stehen, der Datums- und Zeitteil trennt. P2DT4H bedeutet zum Beispiel „2 Tage und 4 Stunden".
Wozu der Buchstabe T gebraucht wird
Ohne das Trennzeichen T wäre der Buchstabe M mehrdeutig — er steht sowohl für Monate (im Datumsteil) als auch für Minuten (im Zeitteil). Deshalb bedeutet P1M „1 Monat", während PT1M „1 Minute" bedeutet.
Direkt in der Java-Standardbibliothek verankert
Die Methoden Duration.parse() und Period.parse() aus dem Paket java.time lesen ISO 8601 Duration-Strings direkt ein, ganz ohne externe Bibliothek. Das macht das Format zu einem naheliegenden Austauschformat zwischen einem Java- oder Kotlin-Backend und jeder externen API, die Dauern als solche Zeichenketten zurückgibt.
Wofür man das braucht
- Die Dauer eines Videos oder Events aus der Antwort einer externen API entschlüsseln.
- Eine korrekte ISO 8601 Duration-Zeichenkette für die eigene API oder den eigenen Datenfeed erstellen.
- Dauern zwischen einem menschenlesbaren Format und der maschinellen ISO-Notation umrechnen.
Bruchteile von Sekunden in der Notation
Der Standard ISO 8601 erlaubt einen Dezimalteil nur bei der letzten (kleinsten) Komponente der Zeichenkette — zum Beispiel bedeutet PT1.5S „1,5 Sekunden", und PT1H30.5M bedeutet „1 Stunde 30,5 Minuten". Ein Dezimalteil bei jeder anderen Komponente außer der letzten ist vom Standard nicht vorgesehen.