Preskoči na vsebino

Žetoni za oblikovanje datuma

Dve široko uporabljeni družini nizov oblikovanja datuma se prekrivata dovolj, da bi bila nevarna. strftime — iz C, in podedovana od Pythona, Ruby, PHP in GNU date — uporabi žetone odstotkov, kot je %Y. Unicode LDML, ki ga uporablja ICU, Java, moment in dayjs, uporablja ponovljene črke, kot je yyyy. V LDML je MM mesec in mm minuta; obračanje tega para nazaj je klasična napaka.

Vsaka spodnja vrstica je upodobljena za isti trenutek: ponedeljek 9. marec 2026, 14:05:07 UTC. Ta datum je izbran tako, da se nič ne skriva — enocifren dan in mesec razkrijeta polnjenje ničel, popoldansko uro naredi uro 12- in 24-urne ure drugačne vidne, in dan v tednu je enoznačen.

Prazen stolpec enakovrednosti pomeni, da ima drugi dialekt za to ni enega samega žetona in moraš sam sestavljati vrednost. Testni nabor upodobi polja v koledarju s funkcijami datuma lastne platforme in jih primerja s to tabelo, zato se primeri ne morejo odmakniti od realnosti.

Leto

4
strftimeLDMLPoljeUpodobi kot
%YyyyyŠtiridesna cifra leto2026
%yyyDvocifrno letoDvoumno po konstrukciji. Izognite se mu v čem koli shranjenem.26
%CStoletje — leto deljeno s 10020
%GYYYYLeto oštevilčevanja ISO tednaSe razlikuje od leta v koledarju blizu novega leta. Uporabi samo s številko ISO tedna.2026

Mesec

4

V LDML je MM mesec in mm minuta.

strftimeLDMLPoljeUpodobi kot
%mMMMesec, polnjeno z ničlami03
%-mMMesec, ni polnjenja3
%bMMMOkrajšano ime mesecaMar
%BMMMMPolno ime mesecaMarch

Dan in dan v tednu

8

V LDML je dd dan meseca in DDD je dan leta.

strftimeLDMLPoljeUpodobi kot
%dddDan meseca, polnjeno z ničlami09
%-ddDan meseca, ni polnjenja9
%eDan meseca, prostor-polnjeno 9
%jDDDDan leta, 001–366068
%aEEEOkrajšano ime dneva v tednuMon
%AEEEEPolno ime dneva v tednuMonday
%uDelavnik kot število, ponedeljek je 1%w številka enaka dne od nedelje kot 0.1
%VwwŠtevilka ISO tedna, tedni se začnejo v ponedeljek11

Čas

8
strftimeLDMLPoljeUpodobi kot
%HHHUra na 24-urni uri14
%-HHUra, ni polnjenja14
%IhhUra na 12-urni uri02
%MmmMinuta05
%SssDrugi07
%3NSSSMilisekunde000
%paDopoldan ali popoldnePM
%sUnix časovnik — sekunde od 1970-01-01 UTC1773065107

Časovna zona

3

Odmik je število; ime zones je pravilo. Samo ime preživi spremembo DST.

strftimeLDMLPoljeUpodobi kot
%zZZOdmik UTC, ni dvopičja+0000
%:zXXXOdmik UTC z dvopičjem, kot ga želi ISO 8601+00:00
%ZzzzOkrajšava časovne zoneOkrajšave niso edinstvenega — CST je najmanj tri različne cone.UTC

Splošne kombinacije

7

Zgrajeno iz prejšnjih žetonov — nobena knjižnica ni potrebna.

strftimeLDMLPoljeUpodobi kot
%Fyyyy-MM-ddDatum ISO2026-03-09
%THH:mm:ss24-urni čas14:05:07
%FT%T%:zyyyy-MM-dd'T'HH:mm:ssXXXPopolni časovnik ISO 8601Oblika za shranjevanje. Sortira kot besedilo, nedvoumno o odmiku.2026-03-09T14:05:07+00:00
%a, %d %b %Y %T %zEEE, dd MMM yyyy HH:mm:ss ZZRFC 2822 — glave e-pošte in starejši HTTPMon, 09 Mar 2026 14:05:07 +0000
%m/%d/%YMM/dd/yyyyKonvencija ZDA, mesec prvi03/09/2026
%d.%m.%Ydd.MM.yyyyEvropska konvencija, dan prvi09.03.2026
%%''Dobesedni znak odstotka%

FAQ

Kakšna je razlika med yyyy in YYYY?
V LDML je yyyy leto v koledarju in YYYY je leto oštevilčevanja ISO tedna. Razlikujeta se za nekaj dni vsak januar: 2027-01-01 pada v ISO teden 53 leta 2026, zato YYYY prebere 2026 tam. Slučajno uporabo YYYY proizvede napako, ki se pojavi enkrat na leto in nato izgine, zato je tako težko jo uloviti.
Zakaj se moj mesec prikazuje kot minute?
Ker si v dialektu LDML in si uporabil mm namesto MM. LDML je občutljiva na velike črke: M je mesec, m je minuta, D je dan leta, d je dan meseca. strftime ima isto past na drugem mestu — %M je minute in %m je mesec.
Kako pridobim polnjeno proti nepolnjeni številki?
V strftime razširitev GNU %-d odstrani polnjenje, zato je %d 09 in %-d 9. V LDML število črk neposredno nastavi širino: d je 9 in dd je 09. Niti ni prenosljivo — %-d ne obstaja na vsaki platformi.
Kateri oblika bi moral shraniti datume?
ISO 8601 z eksplicitnim odmikom — 2026-03-09T14:05:07+00:00. Sortira se pravilno kot besedilo, je nedvoumna o odmiku in vsak jezik jo razčleni. Shrani to in oblikuj za prikaz v zadnjem možnem trenutku; shranjena lokalna datuma brez odmika je nepopravljiva izguba podatkov.