Fără încărcare, 100% local, fără cont

Articol

Durate ISO 8601: ce înseamnă P1DT2H

Un răspuns al YouTube Data API spune că un videoclip durează PT4M13S. O invitație de calendar poartă P15DT5H0M20S. Un server de director marchează un cont cu 20260424174227.0Z, care pare înrudit, dar este cu totul altceva. Aceste șiruri compacte urmează reguli care merită cunoscute, pentru că citite greșit transformă minutele în luni. Acesta este un tur al formatului de durată ISO 8601: ce înseamnă literele, unde apare formatul și subtilitatea sa majoră, aceea că o durată scrisă în acest fel nu este întotdeauna o cantitate fixă de timp.

P, T și ce înseamnă literele

O durată ISO 8601 începe cu P (perioadă). Apoi urmează componentele de dată, fiecare un număr urmat de litera unității sale: Y ani, M luni, W săptămâni, D zile. Un T separă partea de dată de partea de timp: H ore, M minute, S secunde. Fiecare componentă este opțională; scrieți doar ce vă trebuie. PT15M înseamnă 15 minute, P1DT2H înseamnă o zi și două ore, P3W înseamnă trei săptămâni. T nu este decorativ: M înseamnă luni înainte de el și minute după el, deci P1M este o lună, în timp ce PT1M este un minut. Ultima componentă prezentă poate purta o fracție zecimală, ca în PT0.5S pentru jumătate de secundă. Iar unitățile nu trec automat una în alta: PT90M este un mod perfect valid de a scrie o oră și jumătate.

Anatomia duratei ISO 8601 P3Y6M4DT12H30M5S: P deschide perioada, Y M D sunt unități de dată, T trece la timp, H M S sunt unități de timp

Unde întâlnești de fapt formatul

Această sintaxă este discret prezentă peste tot. YouTube Data API raportează lungimea fiecărui videoclip ca o durată ISO 8601 (PT4M13S). HTML acceptă durate în atributul datetime al elementului time. Invitațiile de calendar o folosesc: standardul iCalendar (RFC 5545) scrie lungimile evenimentelor precum PT1H0M0S, deși elimină anii și lunile din gramatica sa. xs:duration din XML Schema acoperă forma completă și permite chiar un semn minus la început pentru durate negative. Bibliotecile standard îl analizează direct: java.time citește șiruri P și T cu Period.parse și Duration.parse, iar aceeași separare există în multe alte limbaje. Dacă produceți programe, fluxuri sau API-uri lizibile de mașină, acest format este limba comună pentru "cât durează".

De ce P1M nu este un număr fix de secunde

PT15M sunt întotdeauna 900 de secunde. P1M nu este: o lună durează 28, 29, 30 sau 31 de zile, în funcție de unde începe, așa că P1M devine concretă doar când este ancorată la o dată. Nici măcar P1D nu are garantate 24 de ore. În Uniunea Europeană, ceasurile sunt date înainte duminică, 29 martie 2026, deci acea zi de calendar durează 23 de ore: adăugarea P1D (o zi de calendar) și adăugarea PT24H (exact 24 de ore) la aceeași seară de sâmbătă ajung la momente diferite. De aceea java.time are două tipuri, Period pentru unități de calendar și Duration pentru secunde exacte, și de aceea bibliotecile de date cer o dată de referință înainte de a converti o durată. Tratați componentele Y, M, W și D ca aritmetică de calendar, și doar H, M și S ca fiind cantități fixe de timp.

Nu este o durată: 20260424174227.0Z

Un șir precum 20260424174227.0Z pare că ar putea aparține aceleiași familii, dar este un marcaj temporal, nu o durată, și nici ISO 8601. Este GeneralizedTime, un format din ASN.1, notația folosită de directoarele LDAP și certificatele X.509. Se citește ca niște câmpuri cu lățime fixă: anul 2026, luna 04, ziua 24, apoi 17:42:27, o fracție opțională (.0), și Z pentru UTC. Îl întâlniți în atribute Active Directory precum whenCreated și whenChanged, în exporturi LDAP, și în interiorul certificatelor, unde RFC 5280 impune GeneralizedTime pentru datele de valabilitate începând cu anul 2050. Detaliul care îl distinge de forma compactă a ISO 8601 este T-ul lipsă: ISO ar scrie același moment ca 20260424T174227Z.

Șirul GeneralizedTime 20260424174227.0Z decodificat câmp cu câmp în 24 aprilie 2026, 17:42:27 UTC

Decodificarea unuia fără a citi standardul

Pentru un șir ocazional, convertorul nostru de durată ISO analizează orice durată P/T în componentele sale și în totalul în secunde, și reconstruiește șirul din numerele pe care le tastați. Când aveți două ore de ceas în loc de un șir de durată (un tur de lucru care merge de la 22:00 la 06:30, de exemplu), calculatorul de durată de timp oferă timpul scurs, inclusiv intervalele care trec peste miezul nopții. Ambele rulează în întregime în browserul dumneavoastră: nimic din ce tastați nu părăsește dispozitivul dumneavoastră. Iar pentru o citire rapidă fără niciun instrument, două reflexe acoperă majoritatea cazurilor: căutați T pentru a ști dacă un M înseamnă luni sau minute, și rețineți că tot ce este în stânga lui T este aritmetică de calendar, nu un număr fix de secunde.

Instrumente din acest articol

Întrebări frecvente

PT1M este același lucru cu P1M?

Nu. Litera M își schimbă semnificația în funcție de separatorul T: P1M este o lună, PT1M este un minut. Aceasta este cea mai comună citire greșită a formatului, și unele erori de API au fost lansate din această cauză. Când aveți dubii, căutați mai întâi T-ul: tot ce se află înainte de el se numără în ani, luni, săptămâni și zile; tot ce se află după el se numără în ore, minute și secunde. O durată bine formată nu are niciodată unități de timp înainte de T sau unități de dată după el.

Cum se scriu 90 de minute ca durată ISO 8601?

PT90M și PT1H30M sunt ambele valide și descriu aceeași cantitate de timp. ISO 8601 nu obligă componentele să rămână în intervalele lor convenționale, deci minutele peste 59 sau orele peste 23 sunt corecte. Analizatoarele acceptă oricare dintre scrieri; pe care o emite un sistem depinde de dacă normalizează sau nu. Dacă generați durate pentru a fi citite de oameni, PT1H30M este mai prietenoasă; dacă comparați durate în cod, comparați totalul lor în secunde, nu șirurile, tocmai pentru că două șiruri diferite pot însemna același lucru.

Care este diferența dintre o durată și un interval?

O durată spune cât timp durează, fără o poziție pe calendar: P3D înseamnă trei zile, începând de oriunde. Un interval ISO 8601 fixează o durată la date reale, scris cu o bară oblică: 2026-07-04T00:00:00Z/P3D înseamnă cele trei zile care încep pe 4 iulie 2026, iar o pereche început/sfârșit precum 2026-07-04/2026-07-07 exprimă același interval. Există și intervale repetate cu un prefix R: R5/2026-07-04T00:00:00Z/P1D înseamnă cinci repetări zilnice de la acel început. Intervalele rezolvă ambiguitatea unităților de calendar, deoarece P1M ancorată la o dată are întotdeauna o lungime definită.

Surse