Ugrás a tartalomhoz

Dátumformátum tokenek

Kétféle széles körben használt dátumformátum karakterlánc család van, és elegendően átfedik egymást, hogy veszélyesek legyenek. A strftime — a C-ből, és a Python, Ruby, PHP és GNU date által örökölve — százalékos tokeneket használ, mint az %Y. Az Unicode LDML, az ICU, Java, moment és dayjs által használt — ismételt betűket használ, mint a yyyy. Az LDML-ben az MM hónap, az mm pedig perc; ennek a párnak a visszaélése a klasszikus hiba.

Az alábbi minden sor egy ugyanez pillanatra van renderelve: hétfő, 2026. március 9., 14:05:07 UTC. Ez a dátum úgy van kiválasztva, hogy semmi sem rejtett — egy egyjegyű nap és hónap feltár a nullás párnázást, a délutáni óra láthatóvá teszi az 12- és 24 órás órák közötti eltérést, és a hétfő nem egyértelmű.

Az üres megfelelő oszlop azt jelenti, hogy a másik nyelvjárásnak nincs egyetlen tokenje sem, és az értéket saját kezűleg össze kell állítania. A tesztcsomag a naptári mezőket a platform saját dátumfunkciói segítségével rendereli, és összehasonlítja azokat ezzel a táblázattal, így a példák nem maradhatnak el a valóságtól.

Év

4
strftimeLDMLMezőRenderel mint
%YyyyyNégy számjegyből év2026
%yyyKétjegyből évKétértelmű az építésből. Kerülje meg bármi tárolt.26
%CSzázad — az év a 100-zal osztva20
%GYYYYISO heti szám évAz naptári évi körül eltér az év kezdetét. Az ISO heti számmal használat.2026

Hónap

4

Az LDML-ben az MM hónap, az mm pedig perc.

strftimeLDMLMezőRenderel mint
%mMMHónap, nullás párnázott03
%-mMHónap, nem párnázott3
%bMMMAz rövidítés hónap nevetMar
%BMMMMTeljes hónap nevetMarch

Nap és hétfő

8

Az LDML-ben a dd a hónapnap, a DDD pedig az év napja.

strftimeLDMLMezőRenderel mint
%dddHónapnap, nullás párnázott09
%-ddHónapnap, nem párnázott9
%eHónapnap, szóköz párnázott 9
%jDDDAz év napja, 001–366068
%aEEEAz rövidítés hétfő nevetMon
%AEEEETeljes hétfő nevetMonday
%uHétfő mint szám, a hétfő az 1Az %w ugyanezek napjait a vasárnap mint 0-ás szám.1
%VwwISO heti szám, hetek hétfőtől kezdve11

Idő

8
strftimeLDMLMezőRenderel mint
%HHHAz óra a 24 órás óra14
%-HHAz óra, nem párnázott14
%IhhAz óra a 12 órás óra02
%MmmAz perc05
%SssAz másodperc07
%3NSSSAz ezredmásodperc000
%paAz délelőtt vagy délutánPM
%sAz Unix timestamp — másodperc az 1970-01-01 UTC-ből1773065107

Időzóna

3

Az offset egy szám; egy zónanév egy szabály. Csak a név túléli a DST-változást.

strftimeLDMLMezőRenderel mint
%zZZAz UTC offset, nincs kötőjel+0000
%:zXXXAz UTC offset a kötőjellel, az ISO 8601 szerint+00:00
%ZzzzAz időzóna rövidítésAz rövidítések nem egyedi — a CST legalább három különböző zóna.UTC

Gyakori kombinációk

7

Az alábbi tokenekből készítve — nincs könyvtár szüksége.

strftimeLDMLMezőRenderel mint
%Fyyyy-MM-ddAz ISO dátum2026-03-09
%THH:mm:ss24 órás idő14:05:07
%FT%T%:zyyyy-MM-dd'T'HH:mm:ssXXXTeljes ISO 8601 időbélyegAz forma tárolást. Szövegként rendez, egyértelmű az offset.2026-03-09T14:05:07+00:00
%a, %d %b %Y %T %zEEE, dd MMM yyyy HH:mm:ss ZZAz RFC 2822 — email fejlécek és régebbi HTTPMon, 09 Mar 2026 14:05:07 +0000
%m/%d/%YMM/dd/yyyyAz amerikai konvenció, hónap első03/09/2026
%d.%m.%Ydd.MM.yyyyAz európai konvenció, nap első09.03.2026
%%''Az szó szerinti százalékos jel%

Gyakori kérdések

Mi a különbség a yyyy és YYYY között?
Az LDML-ben a yyyy a naptári év, a YYYY pedig az ISO hétnap számlálási év. Különböznek az január egyes napjaiban: a 2027-01-01 az 2026 ISO hete 53-ban esik, így a YYYY ott 2026-ot olvas. Az YYYY véletlenül használata hiba, amely évente egyszer jelenik meg, majd eltűnik, amely megmagyarázza, miért olyan nehéz elkapni.
Miért jelenik meg a hónapom percekként?
Mert az LDML nyelvjárásban vagy, és az mm helyett az MM helyett használtad. Az LDML kisesésre érzékeny: az M hónap, az m perc, a D az év napja, a d hónapnap. A strftime ugyanaz a csapda más helyen — az %M percek, az %m pedig a hónap.
Hogyan kapok egy párnázott vagy párnázatlan szám?
A strftime-ban a GNU-kiterjesztés %-d leveszi a párnázást, így %d 09 és %-d 9. Az LDML-ben a betűszám közvetlenül a szélességet adja meg: a d 9 és a dd 09. Egyik sem hordozható — a %-d nem létezik minden platformon.
Milyen formátumban tároltak a dátumokat?
ISO 8601 egy explicit offset-tel — 2026-03-09T14:05:07+00:00. Helyesen rendez szövegként, és egyértelműen az offset, és minden nyelv elemez. Tárold ezt, és a kijelzés formázása az utolsó lehetséges pillanatra; egy tárolt helyi dátum offset nélkül visszanyerhetetlen információvesztés.