Bez przesyłania, 100% lokalnie, bez konta

Artykuł

Czas trwania ISO 8601: co oznacza P1DT2H

Odpowiedź YouTube Data API mówi, że film trwa PT4M13S. Zaproszenie do kalendarza niesie P15DT5H0M20S. Serwer katalogowy znakuje konto czasem 20260424174227.0Z, który wygląda pokrewnie, ale jest czymś zupełnie innym. Te zwięzłe ciągi znaków rządzą się zasadami, które warto znać, bo błędne odczytanie zamienia minuty w miesiące. To przegląd formatu czasu trwania ISO 8601: co oznaczają litery, gdzie pojawia się ten format i jego jedna istotna subtelność, że zapisany w ten sposób czas trwania nie zawsze jest stałą ilością czasu.

P, T i co oznaczają litery

Czas trwania w ISO 8601 zaczyna się od P (period, okres). Potem następują komponenty daty, każdy jako liczba plus litera jednostki: Y lata, M miesiące, W tygodnie, D dni. T oddziela część daty od części czasu: H godziny, M minuty, S sekundy. Każdy komponent jest opcjonalny; zapisuje się tylko to, co potrzebne. PT15M to 15 minut, P1DT2H to jeden dzień i dwie godziny, P3W to trzy tygodnie. T nie jest ozdobnikiem: M przed nim oznacza miesiące, a po nim minuty, więc P1M to jeden miesiąc, podczas gdy PT1M to jedna minuta. Ostatni obecny komponent może nieść ułamek dziesiętny, jak w PT0.5S dla pół sekundy. A jednostki nie przenoszą się same: PT90M to całkowicie poprawny sposób zapisania półtorej godziny.

Budowa czasu trwania ISO 8601 P3Y6M4DT12H30M5S: P otwiera okres, Y M D to jednostki daty, T przełącza na czas, H M S to jednostki czasu

Gdzie naprawdę spotyka się ten format

Ta składnia jest po cichu wszędzie. YouTube Data API zwraca długość każdego filmu jako czas trwania ISO 8601 (PT4M13S). HTML akceptuje czas trwania w atrybucie datetime elementu time. Zaproszenia kalendarzowe go używają: standard iCalendar (RFC 5545) zapisuje długość zdarzenia jako PT1H0M0S, choć pomija lata i miesiące w swojej gramatyce. xs:duration z XML Schema obejmuje pełną formę i pozwala nawet na wiodący znak minus dla ujemnych czasów trwania. Standardowe biblioteki parsują go bezpośrednio: java.time odczytuje ciągi P i T za pomocą Period.parse i Duration.parse, a ten sam podział istnieje w wielu innych językach. Jeśli tworzysz harmonogramy, kanały danych lub API czytelne maszynowo, ten format jest wspólnym językiem odpowiedzi na pytanie "jak długo".

Dlaczego P1M nie jest stałą liczbą sekund

PT15M to zawsze 900 sekund. P1M już nie: miesiąc trwa 28, 29, 30 lub 31 dni w zależności od tego, gdzie się zaczyna, więc P1M staje się konkretne dopiero po zakotwiczeniu w dacie. Nawet P1D nie ma gwarancji 24 godzin. W Unii Europejskiej zegarki przesuwa się do przodu w niedzielę 29 marca 2026, więc ten dzień kalendarzowy trwa 23 godziny: dodanie P1D (jednego dnia kalendarzowego) i dodanie PT24H (dokładnie 24 godzin) do tego samego sobotniego wieczoru prowadzi do różnych momentów w czasie. Dlatego java.time ma dwa typy, Period dla jednostek kalendarzowych i Duration dla dokładnych sekund, i dlatego biblioteki dat wymagają daty odniesienia przed konwersją czasu trwania. Komponenty Y, M, W i D traktuj jako arytmetykę kalendarzową, a tylko H, M i S jako stałe ilości czasu.

To nie jest czas trwania: 20260424174227.0Z

Ciąg taki jak 20260424174227.0Z wygląda, jakby mógł należeć do tej samej rodziny, ale jest znacznikiem czasu, nie czasem trwania, i też nie jest ISO 8601. To GeneralizedTime, format z ASN.1, notacja używana przez katalogi LDAP i certyfikaty X.509. Czyta się go jako pola o stałej szerokości: rok 2026, miesiąc 04, dzień 24, potem 17:42:27, opcjonalny ułamek (.0) i Z dla UTC. Spotykasz go w atrybutach Active Directory takich jak whenCreated i whenChanged, w eksportach LDAP i wewnątrz certyfikatów, gdzie RFC 5280 nakazuje GeneralizedTime dla dat ważności od roku 2050 wzwyż. Cechą odróżniającą go od zwięzłej formy ISO 8601 jest brakujące T: ISO zapisałoby ten sam moment jako 20260424T174227Z.

Ciąg GeneralizedTime 20260424174227.0Z zdekodowany pole po polu na 24 kwietnia 2026, 17:42:27 UTC

Odczytanie jednego bez czytania specyfikacji

Dla jednorazowego ciągu nasz konwerter czasu trwania ISO rozkłada dowolny czas trwania P/T na jego komponenty i sumę w sekundach, a także buduje ciąg z powrotem na podstawie wpisanych liczb. Gdy masz dwie godziny zegarowe zamiast ciągu czasu trwania (na przykład zmianę trwającą od 22:00 do 06:30), kalkulator czasu trwania podaje czas, jaki upłynął, w tym odcinki przechodzące przez północ. Oba działają w całości w przeglądarce: nic, co wpiszesz, nie opuszcza twojego urządzenia. A do szybkiego odczytu bez żadnego narzędzia wystarczą dwa odruchy, które pokrywają większość przypadków: poszukaj T, by wiedzieć, czy M oznacza miesiące czy minuty, i pamiętaj, że wszystko na lewo od T to arytmetyka kalendarzowa, a nie stała liczba sekund.

Narzędzia w tym artykule

Najczęściej zadawane pytania

Czy PT1M to to samo co P1M?

Nie. Litera M zmienia znaczenie w zależności od separatora T: P1M to jeden miesiąc, PT1M to jedna minuta. To najczęstsze błędne odczytanie tego formatu, i niektóre błędy API powstały właśnie przez to. W razie wątpliwości najpierw poszukaj T: wszystko przed nim liczy się w latach, miesiącach, tygodniach i dniach; wszystko po nim liczy się w godzinach, minutach i sekundach. Poprawnie zbudowany czas trwania nigdy nie ma jednostek czasu przed T ani jednostek daty po nim.

Jak zapisać 90 minut jako czas trwania ISO 8601?

PT90M i PT1H30M są oba poprawne i opisują tę samą ilość czasu. ISO 8601 nie zmusza komponentów do trzymania się konwencjonalnych zakresów, więc minuty powyżej 59 czy godziny powyżej 23 są w porządku. Parsery akceptują obie formy zapisu; to, którą wybierze dany system, zależy od tego, czy normalizuje wynik. Jeśli generujesz czasy trwania do czytania przez ludzi, PT1H30M jest przyjaźniejsze; jeśli porównujesz czasy trwania w kodzie, porównuj ich sumę sekund, a nie ciągi znaków, właśnie dlatego, że dwa różne ciągi mogą oznaczać to samo.

Jaka jest różnica między czasem trwania a interwałem?

Czas trwania mówi, jak długo, bez pozycji na kalendarzu: P3D to trzy dni, zaczynające się w dowolnym momencie. Interwał ISO 8601 przypina czas trwania do konkretnych dat, zapisany z ukośnikiem: 2026-07-04T00:00:00Z/P3D oznacza trzy dni zaczynające się 4 lipca 2026, a para początek/koniec taka jak 2026-07-04/2026-07-07 wyraża ten sam odcinek. Istnieją też interwały powtarzające się z przedrostkiem R: R5/2026-07-04T00:00:00Z/P1D oznacza pięć codziennych powtórzeń od tego początku. Interwały rozwiązują niejednoznaczność jednostek kalendarzowych, ponieważ P1M zakotwiczone w dacie zawsze ma jedną określoną długość.

Źródła