Článek
Doby trvání ISO 8601: co znamená P1DT2H
Odpověď z YouTube Data API říká, že video trvá PT4M13S. Kalendářová pozvánka nese P15DT5H0M20S. Adresářový server označí účet časovou značkou 20260424174227.0Z, která vypadá příbuzně, ale jde o něco úplně jiného. Tyto kompaktní řetězce se řídí pravidly, která se vyplatí znát, protože jejich chybné čtení promění minuty v měsíce. Toto je průvodce formátem doby trvání ISO 8601: co znamenají písmena, kde se formát objevuje, a jeho jedna zásadní jemnost, totiž že takto zapsaná doba trvání není vždy pevné množství času.
P, T a co písmena znamenají
Doba trvání ISO 8601 začíná písmenem P (perioda). Poté následují datové složky, každá je číslo následované písmenem jednotky: Y roky, M měsíce, W týdny, D dny. T odděluje datovou část od časové části: H hodiny, M minuty, S sekundy. Každá složka je volitelná; zapisujete jen to, co potřebujete. PT15M je 15 minut, P1DT2H je jeden den a dvě hodiny, P3W jsou tři týdny. T není ozdoba: M před ním znamená měsíce a po něm minuty, takže P1M je jeden měsíc, zatímco PT1M je jedna minuta. Poslední přítomná složka může nést desetinný zlomek, jako v PT0.5S pro půl sekundy. A jednotky se samy nepřevádí: PT90M je zcela platný způsob zápisu hodiny a půl.

Kde se s formátem skutečně setkáte
Tato syntaxe je nenápadně všude. YouTube Data API uvádí délku každého videa jako dobu trvání ISO 8601 (PT4M13S). HTML přijímá doby trvání v atributu datetime prvku time. Kalendářové pozvánky ji používají: standard iCalendar (RFC 5545) zapisuje délku události jako PT1H0M0S, i když ze své gramatiky vynechává roky a měsíce. xs:duration ze XML Schema pokrývá úplnou formu a dokonce umožňuje úvodní znaménko mínus pro záporné doby trvání. Standardní knihovny ji parsují přímo: java.time čte řetězce P a T pomocí Period.parse a Duration.parse, a stejné rozdělení existuje v mnoha dalších jazycích. Pokud vytváříte strojově čitelné harmonogramy, feedy nebo API, je tento formát společným jazykem pro "jak dlouho".
Proč P1M není pevný počet sekund
PT15M je vždy 900 sekund. P1M není: měsíc trvá 28, 29, 30 nebo 31 dní podle toho, kde začíná, takže P1M se stane konkrétním až po ukotvení k datu. Ani P1D nemá zaručeno 24 hodin. V Evropské unii se hodiny posouvají o hodinu dopředu v neděli 29. března 2026, takže tento kalendářní den trvá jen 23 hodin: přičtení P1D (jeden kalendářní den) a přičtení PT24H (přesně 24 hodin) ke stejnému sobotnímu večeru vede k odlišným okamžikům. Proto má java.time dva typy, Period pro kalendářní jednotky a Duration pro přesné sekundy, a proto knihovny pro práci s daty žádají referenční datum, než převedou dobu trvání. Se složkami Y, M, W a D zacházejte jako s kalendářní aritmetikou a pouze H, M a S berte jako pevná množství času.
Není to doba trvání: 20260424174227.0Z
Řetězec jako 20260424174227.0Z vypadá, že by mohl patřit do stejné rodiny, ale je to časové razítko, ne doba trvání, a ani ISO 8601. Jde o GeneralizedTime, formát z ASN.1, zápis používaný adresáři LDAP a certifikáty X.509. Čtěte ho jako pole s pevnou šířkou: rok 2026, měsíc 04, den 24, poté 17:42:27, volitelný zlomek (.0) a Z pro UTC. Setkáte se s ním v atributech Active Directory jako whenCreated a whenChanged, v exportech LDAP a uvnitř certifikátů, kde RFC 5280 vyžaduje GeneralizedTime pro data platnosti od roku 2050 dále. Znak, který ho odlišuje od kompaktní formy ISO 8601, je chybějící T: ISO by stejný okamžik zapsalo jako 20260424T174227Z.

Dekódování jednoho řetězce bez čtení specifikace
Pro jednorázový řetězec náš převodník doby trvání ISO rozloží libovolnou dobu trvání P/T na její složky a celkový počet sekund, a znovu sestaví řetězec z čísel, která zadáte. Když máte místo řetězce doby trvání dva časy na hodinách (třeba směnu, která běží od 22:00 do 06:30), kalkulačka délky času dá uplynulý čas, včetně úseků přesahujících přes půlnoc. Obě fungují zcela ve vašem prohlížeči: nic z toho, co zadáte, neopustí vaše zařízení. A pro rychlé čtení bez jakéhokoli nástroje pokryjí většinu případů dva reflexy: hledejte T, abyste zjistili, jestli M znamená měsíce nebo minuty, a pamatujte, že vše nalevo od T je kalendářní aritmetika, ne pevný počet sekund.
Nástroje v tomto článku
- Převodník délky ISO 8601Zpracujte a převeďte délky ISO 8601 (P1Y2M…) na složky a sekundy. V prohlížeči.
- Kalkulačka délky časuSpočítejte délku mezi dvěma časy dne, včetně nočních úseků. V prohlížeči.
- Převodník formatu dataPřeveďte datum do formatu ISO, US, evropského, tečkovaného, kompaktního a Unix. V prohlížeči.
Časté dotazy
Je PT1M totéž co P1M?
Ne. Písmeno M mění svůj význam podle oddělovače T: P1M je jeden měsíc, PT1M je jedna minuta. Je to nejčastější chybné čtení tohoto formátu, a některé chyby API byly vydány právě kvůli tomu. V případě pochybností hledejte nejprve T: vše před ním se počítá v letech, měsících, týdnech a dnech; vše po něm se počítá v hodinách, minutách a sekundách. Správně zapsaná doba trvání nikdy nemá časové jednotky před T ani datové jednotky po něm.
Jak zapsat 90 minut jako dobu trvání ISO 8601?
PT90M i PT1H30M jsou platné a popisují stejné množství času. ISO 8601 nenutí složky zůstat v jejich obvyklých rozsazích, takže minuty nad 59 nebo hodiny nad 23 jsou v pořádku. Parsery přijímají oba zápisy; který z nich systém vydá, závisí na tom, zda normalizuje. Pokud generujete doby trvání pro čtení lidmi, PT1H30M je vstřícnější; pokud porovnáváte doby trvání v kódu, porovnávejte jejich celkový počet sekund, ne řetězce, právě proto, že dva odlišné řetězce mohou znamenat totéž.
Jaký je rozdíl mezi dobou trvání a intervalem?
Doba trvání říká, jak dlouho, bez pozice v kalendáři: P3D jsou tři dny, počínaje kdekoli. Interval ISO 8601 ukotví dobu trvání ke skutečným datům a zapisuje se lomítkem: 2026-07-04T00:00:00Z/P3D znamená tři dny počínaje 4. červencem 2026, a dvojice začátek/konec jako 2026-07-04/2026-07-07 vyjadřuje stejný úsek. Existují také opakující se intervaly s předponou R: R5/2026-07-04T00:00:00Z/P1D znamená pět denních opakování od tohoto začátku. Intervaly řeší nejednoznačnost kalendářních jednotek, protože P1M ukotvené k datu má vždy jednu určitou délku.