Naar inhoud springen

ISO 8601 uitgelegd: het internationale datumformaat dat elke ontwikkelaar zou moeten gebruiken

Waarom YYYY-MM-DD eenduidig is, hoe de standaard weken, duurtijden en intervallen behandelt, en waarom hij databases en JSON-API’s aandrijft.

· 10 min leestijd · Gabriel

De datum schrijven in ISO 8601-formaat
Inhoudsopgave

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 jaar
  • P3M — drie maanden
  • PT2H30M — twee uur en dertig minuten
  • P1Y2M10DT2H30M — 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-DD in 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-30 zit 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).

← Terug naar alle artikelen