Ga naar inhoud

Datum-indelingtoken

Er zijn twee veel gebruikte families van datumformaatreeksen en ze overlappen net genoeg om gevaarlijk te zijn. strftime — van C en overgeërfd door Python, Ruby, PHP en GNU date — gebruikt percent tokens zoals %Y. Unicode LDML, gebruikt door ICU, Java, moment en dayjs, gebruikt herhaalde letters zoals yyyy. In LDML is MM een maand en mm een minuut; het omkeren van dat paar is de klassieke fout.

Elke rij hieronder wordt weergegeven voor hetzelfde moment: maandag 9 maart 2026, 14:05:07 UTC. Die datum is gekozen zodat niets verborgen blijft — een eencijferige dag en maand stellen nulbuffer bloot, het uur in de middag maakt het 12- en 24-uurklok visueel verschillen, en de weekdag is ondubbelzinnig.

Een lege equivalentkolom betekent dat het andere dialect geen enkel token daarvoor heeft en je de waarde zelf moet samenstellen. De testsuite geeft de kalendervelden weer met de eigen datumfuncties van het platform en vergelijkt ze met deze tabel, dus de voorbeelden kunnen niet van de werkelijkheid afwijken.

Jaar

4
strftimeLDMLVeldRenders als
%YyyyyViercijferig jaar2026
%yyyTweeciferig jaarDubbelzinnig door constructie. Vermijd het in alles wat is opgeslagen.26
%CEeuw — het jaar gedeeld door 10020
%GYYYYISO week-nummering jaarVerschilt van het kalenderjaar rond Nieuwjaarsdag. Alleen gebruiken bij het ISO weeknummer.2026

Maand

4

In LDML is MM de maand en mm de minuut.

strftimeLDMLVeldRenders als
%mMMMaand, nulbuffer03
%-mMMaand, geen buffer3
%bMMMVerkorte maandnaamMar
%BMMMMVolledige maandnaamMarch

Dag en weekdag

8

In LDML is dd dag van maand en DDD dag van jaar.

strftimeLDMLVeldRenders als
%dddDag van maand, nulbuffer09
%-ddDag van maand, geen buffer9
%eDag van maand, ruimte-gepadded 9
%jDDDDag van jaar, 001–366068
%aEEEVerkorte weekdagnaamMon
%AEEEEVolledige weekdagnaamMonday
%uWeekdag als een getal, maandag is 1%w nummert dezelfde dagen van zondag als 0.1
%VwwISO weeknummer, weken beginnend maandag11

Tijd

8
strftimeLDMLVeldRenders als
%HHHUur op de 24-uurs klok14
%-HHUur, geen buffer14
%IhhUur op de 12-uurs klok02
%MmmMinuut05
%SssSeconde07
%3NSSSMilliseconden000
%paAM of PMPM
%sUnix timestamp — seconden sinds 1970-01-01 UTC1773065107

Tijdzone

3

Een offset is een getal; een zonenaam is een regel. Alleen de naam overleeft een DST-wijziging.

strftimeLDMLVeldRenders als
%zZZUTC offset, geen dubbele punt+0000
%:zXXXUTC offset met een dubbele punt, als ISO 8601 het wil+00:00
%ZzzzTijdzoneafkortingAfkortingen zijn niet uniek — CST is minstens drie verschillende zones.UTC

Veel gebruikte combinaties

7

Gebouwd uit de hierboven gegeven tokens — geen bibliotheek nodig.

strftimeLDMLVeldRenders als
%Fyyyy-MM-ddISO-datum2026-03-09
%THH:mm:ss24-uurs tijd14:05:07
%FT%T%:zyyyy-MM-dd'T'HH:mm:ssXXXVolledig ISO 8601-timestampHet formaat om op te slaan. Sorteert als tekst, ondubbelzinnig over de offset.2026-03-09T14:05:07+00:00
%a, %d %b %Y %T %zEEE, dd MMM yyyy HH:mm:ss ZZRFC 2822 — e-mailkoppelingen en oudere HTTPMon, 09 Mar 2026 14:05:07 +0000
%m/%d/%YMM/dd/yyyyAmerikaanse conventie, maand eerst03/09/2026
%d.%m.%Ydd.MM.yyyyEuropese conventie, dag eerst09.03.2026
%%''Een letterlijk procentteken%

FAQ

Wat is het verschil tussen yyyy en YYYY?
In LDML is yyyy het kalenderjaar en YYYY het ISO week-nummering jaar. Ze verschillen een paar dagen elk januari: 2027-01-01 valt in ISO week 53 van 2026, dus YYYY leest daar 2026. Per ongeluk YYYY gebruiken produceert een fout die eenmaal per jaar verschijnt en vervolgens verdwijnt, daarom is het zo moeilijk op te vangen.
Waarom worden mijn maanden als minuten weergegeven?
Omdat je in een LDML-dialect bent en mm in plaats van MM hebt gebruikt. LDML is case-gevoelig: M is maand, m is minuut, D is dag van jaar, d is dag van maand. strftime heeft dezelfde val op een ander plaats — %M zijn minuten en %m de maand.
Hoe krijg ik een gepadde versus ongepadde getal?
In strftime wordt met de GNU-extensie %-d de buffer verwijderd, dus %d is 09 en %-d is 9. In LDML stelt het lettergetal de breedte in: d is 9 en dd is 09. Geen van beide is draagbaar — %-d bestaat niet op elk platform.
Welk formaat moet ik datums in opslaan?
ISO 8601 met een expliciete offset — 2026-03-09T14:05:07+00:00. Het sorteert correct als tekst, het is ondubbelzinnig over de offset, en elke taal parseert het. Bewaar dat en formatteer voor weergave op het laatste mogelijke moment; een opgeslagen lokale datum zonder offset is onherstelbaar informatie verlies.