Artikel
ISO 8601-duren: wat P1DT2H betekent
Een antwoord van de YouTube Data API vermeldt dat een video PT4M13S duurt. Een agenda-uitnodiging draagt P15DT5H0M20S. Een directoryserver voorziet een account van een tijdstempel 20260424174227.0Z, wat verwant lijkt maar iets heel anders is. Deze compacte tekenreeksen volgen regels die de moeite waard zijn om te kennen, want ze verkeerd lezen verandert minuten in maanden. Dit is een rondgang door het ISO 8601-duurformaat: wat de letters betekenen, waar het formaat opduikt, en zijn ene grote subtiliteit, namelijk dat een op deze manier geschreven duur niet altijd een vaste hoeveelheid tijd is.
P, T, en wat de letters betekenen
Een ISO 8601-duur begint met P (periode). Dan volgen de datumcomponenten, elk een getal gevolgd door zijn eenheidsletter: Y jaren, M maanden, W weken, D dagen. Een T scheidt het datumdeel van het tijddeel: H uren, M minuten, S seconden. Elke component is optioneel; je schrijft alleen wat je nodig hebt. PT15M is 15 minuten, P1DT2H is één dag en twee uur, P3W is drie weken. De T is geen versiering: M betekent maanden ervoor en minuten erna, dus P1M is één maand terwijl PT1M één minuut is. De laatst aanwezige component mag een decimale breuk dragen, zoals in PT0.5S voor een halve seconde. En de eenheden lopen niet vanzelf over: PT90M is een volkomen geldige manier om anderhalf uur te schrijven.

Waar je het formaat werkelijk tegenkomt
Deze syntaxis is stilletjes overal. De YouTube Data API geeft elke videolengte op als een ISO 8601-duur (PT4M13S). HTML accepteert duren in het datetime-attribuut van het time-element. Agenda-uitnodigingen gebruiken het: de iCalendar-standaard (RFC 5545) schrijft de lengte van een evenement als PT1H0M0S, al laat die jaren en maanden weg uit zijn grammatica. xs:duration van XML Schema dekt de volledige vorm en staat zelfs een voorafgaand minteken toe voor negatieve duren. Standaardbibliotheken parsen het rechtstreeks: java.time leest P- en T-tekenreeksen met Period.parse en Duration.parse, en dezelfde splitsing bestaat in veel andere talen. Als je machineleesbare schema's, feeds of API's produceert, is dit formaat de gemeenschappelijke taal voor "hoe lang".
Waarom P1M geen vast aantal seconden is
PT15M is altijd 900 seconden. P1M niet: een maand duurt 28, 29, 30 of 31 dagen, afhankelijk van waar hij begint, dus P1M wordt pas concreet zodra je hem aan een datum verankert. Zelfs P1D is niet gegarandeerd 24 uur. In de Europese Unie gaan de klokken vooruit op zondag 29 maart 2026, waardoor die kalenderdag 23 uur duurt: P1D (één kalenderdag) en PT24H (precies 24 uur) optellen bij dezelfde zaterdagavond komt uit op verschillende momenten. Daarom heeft java.time twee typen, Period voor kalendereenheden en Duration voor exacte seconden, en daarom vragen datumbibliotheken om een referentiedatum voordat ze een duur omzetten. Behandel de componenten Y, M, W en D als kalenderrekenkunde, en alleen H, M en S als vaste hoeveelheden tijd.
Geen duur: 20260424174227.0Z
Een tekenreeks als 20260424174227.0Z lijkt tot dezelfde familie te behoren, maar het is een tijdstempel, geen duur, en ook geen ISO 8601. Het is GeneralizedTime, een formaat uit ASN.1, de notatie die gebruikt wordt door LDAP-directories en X.509-certificaten. Lees het als velden met een vaste breedte: jaar 2026, maand 04, dag 24, dan 17:42:27, een optionele breuk (.0), en Z voor UTC. Je komt het tegen in Active Directory-attributen zoals whenCreated en whenChanged, in LDAP-exports, en in certificaten, waar RFC 5280 GeneralizedTime voorschrijft voor geldigheidsdata vanaf het jaar 2050. Het kenmerk dat het onderscheidt van de compacte vorm van ISO 8601 is de ontbrekende T: ISO zou hetzelfde moment schrijven als 20260424T174227Z.

Er een decoderen zonder de specificatie te lezen
Voor een eenmalige tekenreeks ontleedt onze ISO-duurconverter elke P/T-duur in zijn componenten en zijn totaal in seconden, en bouwt de tekenreeks weer op uit de getallen die je intypt. Als je twee kloktijden hebt in plaats van een duurtekenreeks (een dienst die bijvoorbeeld van 22:00 tot 06:30 loopt), geeft de tijdsduurcalculator de verstreken tijd, inclusief spannen die middernacht overschrijden. Beide draaien volledig in je browser: niets wat je intypt verlaat je apparaat. En voor snel lezen zonder enig hulpmiddel dekken twee vuistregels de meeste gevallen: zoek de T om te weten of een M maanden of minuten betekent, en onthoud dat alles links van de T kalenderrekenkunde is, geen vast aantal seconden.
Tools in dit artikel
- ISO 8601-duurconverterParseer en converteer ISO 8601-duren (P1Y2M…) naar componenten en seconden. In de browser.
- TijdsduurcalculatorBereken de duur tussen twee tijdstippen, inclusief perioden die de nacht overbruggen. In de browser.
- DatumformaatconverterConverteer een datum naar ISO-, US-, Europese, gestippelde, compacte en Unix-formaten. In de browser.
Veelgestelde vragen
Is PT1M hetzelfde als P1M?
Nee. De letter M verandert van betekenis afhankelijk van het T-scheidingsteken: P1M is één maand, PT1M is één minuut. Dit is de meest voorkomende verkeerde lezing van het formaat, en sommige API-bugs zijn hierdoor ontstaan. Bij twijfel zoek je eerst de T op: alles ervoor telt in jaren, maanden, weken en dagen; alles erna telt in uren, minuten en seconden. Een goed gevormde duur heeft nooit tijdeenheden vóór de T of datumeenheden erna.
Hoe schrijf je 90 minuten als een ISO 8601-duur?
PT90M en PT1H30M zijn beide geldig en beschrijven dezelfde hoeveelheid tijd. ISO 8601 dwingt componenten niet in hun conventionele bereiken, dus minuten boven de 59 of uren boven de 23 zijn prima. Parsers accepteren beide schrijfwijzen; welke een systeem produceert, hangt af van of het normaliseert. Als je duren genereert die door mensen gelezen worden, is PT1H30M vriendelijker; als je duren in code vergelijkt, vergelijk dan hun totale seconden in plaats van de tekenreeksen, juist omdat twee verschillende tekenreeksen hetzelfde kunnen betekenen.
Wat is het verschil tussen een duur en een interval?
Een duur zegt hoe lang, zonder positie op de kalender: P3D is drie dagen, beginnend waar dan ook. Een ISO 8601-interval koppelt een duur aan werkelijke data, geschreven met een schuine streep: 2026-07-04T00:00:00Z/P3D betekent de drie dagen die beginnen op 4 juli 2026, en een start/eind-paar zoals 2026-07-04/2026-07-07 drukt dezelfde spanne uit. Er bestaan ook herhalende intervallen met een R-voorvoegsel: R5/2026-07-04T00:00:00Z/P1D betekent vijf dagelijkse herhalingen vanaf dat startpunt. Intervallen lossen de dubbelzinnigheid van kalendereenheden op, aangezien P1M verankerd aan een datum altijd één bepaalde lengte heeft.