Het probleem dat ISO 8601 oplost
Wat betekent 03/04/05? In de Verenigde Staten is het 4 maart 2005. In het grootste deel van Europa is het 3 april 2005. In Japan is het 5 april 2003. Dit soort dubbelzinnigheid heeft mislukte contracten, gemiste vluchten, dubbel betaalde facturen en minstens één beroemde databasemigratieramp veroorzaakt. ISO 8601, voor het eerst gepubliceerd in 1988 en onlangs herzien als ISO 8601-1:2019 en ISO 8601-2:2019, bestaat om dat allemaal te laten verdwijnen.
Het basisformaat
De hoofdregel is eenvoudig: schrijf data als JJJJ-MM-DD, altijd met een jaar van vier cijfers, altijd met de grootste eenheid eerst. Het formaat sorteert correct als platte tekst en is daarom de standaard in databases, logbestanden en bestandsnamen.
Tijden en gecombineerde datum-tijden
Tijden gebruiken 24-uursnotatie: HH:MM:SS. Een gecombineerde datum en tijd gebruiken een letterlijke "T" als scheidingsteken: 2025-01-25T14:30:00. Tijdzone-informatie wordt toegevoegd met een "Z" voor UTC of een offset met teken zoals +02:00. Een volledig gekwalificeerd moment ziet er zo uit: 2025-01-25T14:30:00+01:00.
Weekdata
ISO 8601 definieert ook een op weken gebaseerde kalender die veel bedrijven gebruiken voor financiële rapportage. Weken beginnen op maandag. Week 1 is de week die de eerste donderdag van het jaar bevat. Een weekdatum wordt geschreven als JJJJ-Www-D, bijvoorbeeld 2025-W04-6. Daarom hebben sommige jaren 52 ISO-weken en sommige 53.
Ordinale data
Een minder gebruikelijk maar nuttig formaat is de ordinale datum: JJJJ-DDD, waar DDD de dag van het jaar van 001 tot 365 (of 366 in een schrikkeljaar) is. NASA, meteorologen en de luchtvaartindustrie gebruiken ze vaak.
Duurtijden en intervallen
ISO 8601 definieert ook een syntaxis voor duurtijden. Een duurtijd begint met de letter "P" (voor "period") en gebruikt aanduidingen van één letter. Voorbeelden:
P1Y— een jaarP3M— drie maandenPT2H30M— twee uur en dertig minutenP1Y2M10DT2H30M— een jaar, twee maanden, tien dagen, tweeënhalf uur
Een interval bestaat uit twee datum-tijden gescheiden door een schuine streep: 2025-01-01T00:00:00Z/2025-12-31T23:59:59Z. Een herhalend interval wordt voorafgegaan door R[n]/.
RFC 3339: het internetprofiel
De meeste internetprotocollen gebruiken ISO 8601 niet direct. Ze gebruiken RFC 3339, een specificatie uit 2002 van Graham Klyne en Chris Newman die een strikte deelverzameling van ISO 8601 definieert. RFC 3339 wordt gebruikt door JSON-API’s, logbestanden, OAuth-tokens en e-mailheaders.
Praktisch advies voor ontwikkelaars
- Sla tijdstempels altijd op in UTC. Converteer alleen bij weergave naar lokale tijd.
- Schrijf altijd vier cijfers voor het jaar.
- Gebruik
JJJJ-MM-DDin bestandsnamen; ze sorteren chronologisch zonder extra logica. - Als je API een datum teruggeeft, geef die terug als ISO 8601-string in UTC, niet als Unix-tijdstempel.
- Parse met een echte bibliotheek. Zelfgeschreven regex-parsers falen uiteindelijk.
- Wees voorzichtig met het ISO-weekjaar.
2024-12-30zit in ISO-weekjaar 2025.
Verder lezen
- ISO, "ISO 8601-1:2019 Date and time — Representations for information interchange — Part 1: Basic rules" (2019).
- Klyne, G. en Newman, C., "Date and Time on the Internet: Timestamps", IETF RFC 3339 (juli 2002).