Preskočiť na obsah

Tokeny formátu dátumu

Existujú dve rozšírené rodiny formátovacích reťazcov pre dátum a prekrývajú sa presne tak, aby to bolo nebezpečné. strftime — z jazyka C, prevzaté Pythonom, Ruby, PHP a GNU date — používa percentové tokeny ako %Y. Unicode LDML, ktoré používa ICU, Java, moment a dayjs, používa opakované písmená ako yyyy. V LDML je MM mesiac a mm minúta; zameniť túto dvojicu je klasická chyba.

Každý riadok nižšie je vykreslený pre ten istý okamih: pondelok 9. marca 2026, 14:05:07 UTC. Ten dátum je zvolený tak, aby sa nič neskrylo — jednociferný deň a mesiac odhalia doplnenie nulou, poobedná hodina viditeľne odlíši 12- a 24-hodinový čas a deň týždňa je jednoznačný.

Prázdny stĺpec s ekvivalentom znamená, že druhý dialekt preň jediný token nemá a hodnotu si musíte zložiť sami. Testy vykreslia kalendárne polia vlastnými dátumovými funkciami platformy a porovnajú ich s touto tabuľkou, takže sa príklady nemôžu odtrhnúť od skutočnosti.

Rok

4
strftimeLDMLPoleVykreslí sa ako
%YyyyyŠtvorciferný rok2026
%yyyDvojciferný rokNejednoznačný už zo svojej podstaty. V ukladaných dátach sa mu vyhnite.26
%CStoročie — rok delený stom20
%GYYYYRok podľa ISO číslovania týždňovOkolo Nového roka sa líši od kalendárneho. Používajte len s ISO číslom týždňa.2026

Mesiac

4

V LDML je MM mesiac a mm minúta.

strftimeLDMLPoleVykreslí sa ako
%mMMMesiac doplnený nulou03
%-mMMesiac bez doplnenia3
%bMMMSkrátený názov mesiacaMar
%BMMMMCelý názov mesiacaMarch

Deň a deň týždňa

8

V LDML je dd deň v mesiaci a DDD deň v roku.

strftimeLDMLPoleVykreslí sa ako
%dddDeň v mesiaci doplnený nulou09
%-ddDeň v mesiaci bez doplnenia9
%eDeň v mesiaci doplnený medzerou 9
%jDDDDeň v roku, 001–366068
%aEEESkrátený názov dňa týždňaMon
%AEEEECelý názov dňa týždňaMonday
%uDeň týždňa ako číslo, pondelok je 1%w čísluje tie isté dni od nedele ako 0.1
%VwwISO číslo týždňa, týždeň začína v pondelok11

Čas

8
strftimeLDMLPoleVykreslí sa ako
%HHHHodina v 24-hodinovom formáte14
%-HHHodina bez doplnenia14
%IhhHodina v 12-hodinovom formáte02
%MmmMinúta05
%SssSekunda07
%3NSSSMilisekundy000
%paAM alebo PMPM
%sUnixová časová značka — sekundy od 1. 1. 1970 UTC1773065107

Časová zóna

3

Posun je číslo; názov zóny je pravidlo. Zmenu letného času prežije len názov.

strftimeLDMLPoleVykreslí sa ako
%zZZPosun od UTC bez dvojbodky+0000
%:zXXXPosun od UTC s dvojbodkou, ako ho chce ISO 8601+00:00
%ZzzzSkratka časovej zónySkratky nie sú jednoznačné — CST sú najmenej tri rôzne zóny.UTC

Bežné kombinácie

7

Zložené z tokenov vyššie — žiadna knižnica netreba.

strftimeLDMLPoleVykreslí sa ako
%Fyyyy-MM-ddISO dátum2026-03-09
%THH:mm:ss24-hodinový čas14:05:07
%FT%T%:zyyyy-MM-dd'T'HH:mm:ssXXXPlná časová značka ISO 8601Formát na ukladanie. Radí sa ako text, jednoznačný ohľadom posunu.2026-03-09T14:05:07+00:00
%a, %d %b %Y %T %zEEE, dd MMM yyyy HH:mm:ss ZZRFC 2822 — hlavičky e-mailov a starší HTTPMon, 09 Mar 2026 14:05:07 +0000
%m/%d/%YMM/dd/yyyyAmerická konvencia, mesiac prvý03/09/2026
%d.%m.%Ydd.MM.yyyyEurópska konvencia, deň prvý09.03.2026
%%''Doslovný znak percenta%

Časté otázky

Aký je rozdiel medzi yyyy a YYYY?
V LDML je yyyy kalendárny rok a YYYY rok podľa ISO číslovania týždňov. Líšia sa niekoľko dní každý január: 1. 1. 2027 patrí do 53. ISO týždňa roku 2026, takže YYYY tam vypíše 2026. Nechcené YYYY spôsobí chybu, ktorá sa objaví raz do roka a potom zmizne — preto sa tak ťažko odhaľuje.
Prečo sa mi mesiac zobrazuje ako minúty?
Pretože ste v LDML dialekte a použili ste mm namiesto MM. LDML rozlišuje veľkosť písmen: M je mesiac, m je minúta, D je deň v roku, d je deň v mesiaci. strftime má tú istú pascu na inom mieste — %M sú minúty a %m je mesiac.
Ako dostanem číslo s doplnenou nulou a bez nej?
V strftime rozšírenie GNU %-d doplnenie odstráni, takže %d je 09 a %-d je 9. V LDML určuje šírku priamo počet písmen: d je 9 a dd je 09. Ani jedno nie je prenosné — %-d neexistuje na každej platforme.
V akom formáte mám dátumy ukladať?
V ISO 8601 s výslovným posunom — 2026-03-09T14:05:07+00:00. Radí sa správne aj ako text, je jednoznačný ohľadom posunu a rozparsuje ho každý jazyk. Ukladajte toto a formátujte až pri zobrazení; uložený lokálny dátum bez posunu je nenávratná strata informácie.