Hoppa till innehåll

Datumformatstokens

Det finns två allmänt använda familjer av datumformatsträngar och de överlappar bara tillräckligt för att vara farliga. strftime — från C, och ärvd av Python, Ruby, PHP och GNU date — använder procenttokens som %Y. Unicode LDML, använd av ICU, Java, moment och dayjs, använder upprepade bokstäver som yyyy. I LDML är MM en månad och mm en minut; att få det paret bakvänt är den klassiska buggen.

Varje rad nedan är rendererad för samma ögonblick: Måndag 9 mars 2026, 14:05:07 UTC. Det datumet är valt så att ingenting gömmer sig — en ensiffer dag och månad avslöjar nollstoppning, eftermiddagstimmen gör att 12- och 24-timmarsklockan skiljer sig synligt, och veckodagen är entydig.

En tom motsvarandkolumn betyder att den andra dialekten inte har en enkel token för det och du måste komponera värdet själv. Testsviten renderar kalenderfälten med plattformens egna datumfunktioner och jämför dem med denna tabell, så exemplen kan inte driva från verkligheten.

År

4
strftimeLDMLFältRenderar som
%YyyyyFyrsiffrig år2026
%yyyTvåsiffrig årTvetydig genom konstruktion. Undvik det i allt lagrat.26
%CÅrhundrade — året dividerat med 10020
%GYYYYISO-veckennumreringsårSkiljer sig från kalenderåret omkring Nyår. Använd endast med ISO-veckonumret.2026

Månad

4

I LDML är MM månaden och mm minuten.

strftimeLDMLFältRenderar som
%mMMMånad, nollstopad03
%-mMMånad, ingen stoppning3
%bMMMFörkortad månadnamnMar
%BMMMMFullt månadnamnMarch

Dag och veckodag

8

I LDML är dd dag på månaden och DDD dag på året.

strftimeLDMLFältRenderar som
%dddDag på månaden, nollstopad09
%-ddDag på månaden, ingen stoppning9
%eDag på månaden, mellanslag-stoppning 9
%jDDDDag på året, 001–366068
%aEEEFörkortad veckodagsnamnMon
%AEEEEFullt veckodagsnamnMonday
%uVeckodag som ett nummer, Måndag är 1%w numrerar samma dagar från Söndag som 0.1
%VwwISO-veckonummer, veckor som börjar Måndag11

Tid

8
strftimeLDMLFältRenderar som
%HHHTimme på 24-timmarsklockan14
%-HHTimme, ingen stoppning14
%IhhTimme på 12-timmarsklockan02
%MmmMinut05
%SssSekund07
%3NSSSMillisekunder000
%paAM eller PMPM
%sUnix-tidsstämpel — sekunder sedan 1970-01-01 UTC1773065107

Tidszon

3

En offset är ett nummer; ett zonamn är en regel. Bara namnet överlever en DST-förändring.

strftimeLDMLFältRenderar som
%zZZUTC-offset, ingen kolon+0000
%:zXXXUTC-offset med ett kolon, som ISO 8601 vill ha det+00:00
%ZzzzTidszonsförkortningFörkortningar är inte unika — CST är minst tre olika zoner.UTC

Vanliga kombinationer

7

Byggd av tokens ovan — inget bibliotek behövs.

strftimeLDMLFältRenderar som
%Fyyyy-MM-ddISO-datum2026-03-09
%THH:mm:ss24-timmarstid14:05:07
%FT%T%:zyyyy-MM-dd'T'HH:mm:ssXXXFullständig ISO 8601-tidsstämpelFormatet att lagra. Sorterar som text, entydligt om offsetet.2026-03-09T14:05:07+00:00
%a, %d %b %Y %T %zEEE, dd MMM yyyy HH:mm:ss ZZRFC 2822 — e-posthuvuden och äldre HTTPMon, 09 Mar 2026 14:05:07 +0000
%m/%d/%YMM/dd/yyyyUS-konvention, månad först03/09/2026
%d.%m.%Ydd.MM.yyyyEuropeisk konvention, dag först09.03.2026
%%''En bokstavlig procentsign%

FAQ

Vad är skillnaden mellan yyyy och YYYY?
I LDML är yyyy kalenderåret och YYYY är ISO-veckennumreringsåret. De skiljer sig åt under några dagar varje januari: 2027-01-01 faller i ISO-vecka 53 av 2026, så YYYY läser 2026 där. Att använd YYYY av misstag producerar en bugg som visas en gång om året och sedan försvinner, vilket är varför den är så svår att fånga.
Varför visar min månad upp som minuter?
För att du är i en LDML-dialekt och använde mm istället för MM. LDML är skiftlägeskänslig: M är månad, m är minut, D är dag på året, d är dag på månaden. strftime har samma fälla på en annan plats — %M är minuter och %m är månaden.
Hur får jag ett buffrat kontra obuffrat nummer?
I strftime tar GNU-tillägget %-d av buffringen, så %d är 09 och %-d är 9. I LDML anger bokstavräningen bredden direkt: d är 9 och dd är 09. Inget är portabelt — %-d finns inte på varje plattform.
Vilket format bör jag lagra datum i?
ISO 8601 med en explicit offset — 2026-03-09T14:05:07+00:00. Det sorterar korrekt som text, det är entydigt om offsetet, och varje språk analyserar det. Lagra det och formatera för visning vid möjligt senaste ögonblick; ett lagrat lokalt datum utan en offset är oåterkallelig informationsförlust.