Articolo
Durate ISO 8601: cosa significa P1DT2H
Una risposta della YouTube Data API dice che un video dura PT4M13S. Un invito calendario riporta P15DT5H0M20S. Un server di directory data un account con 20260424174227.0Z, che sembra imparentato ma è tutt'altra cosa. Queste stringhe compatte seguono regole che vale la pena conoscere, perché leggerle male trasforma i minuti in mesi. Ecco un percorso attraverso il formato di durata ISO 8601: cosa significano le lettere, dove compare il formato, e la sua grande sottigliezza, cioè che una durata scritta così non è sempre una quantità fissa di tempo.
P, T, e cosa significano le lettere
Una durata ISO 8601 inizia con P (periodo). Poi vengono i componenti della data, ciascuno un numero seguito dalla sua lettera unità: Y anni, M mesi, W settimane, D giorni. Una T separa la parte data dalla parte ora: H ore, M minuti, S secondi. Ogni componente è opzionale; si scrive solo ciò che serve. PT15M sono 15 minuti, P1DT2H è un giorno e due ore, P3W sono tre settimane. La T non è decorazione: M significa mesi prima di essa e minuti dopo di essa, quindi P1M è un mese mentre PT1M è un minuto. L'ultimo componente presente può portare una frazione decimale, come in PT0.5S per mezzo secondo. E le unità non si convertono automaticamente tra loro: PT90M è un modo perfettamente valido di scrivere un'ora e mezza.

Dove si incontra davvero questo formato
Questa sintassi è ovunque, silenziosamente. La YouTube Data API riporta la durata di ogni video come una durata ISO 8601 (PT4M13S). HTML accetta durate nell'attributo datetime dell'elemento time. Gli inviti calendario la usano: lo standard iCalendar (RFC 5545) scrive la durata di un evento come PT1H0M0S, anche se esclude anni e mesi dalla sua grammatica. xs:duration di XML Schema copre la forma completa e ammette persino un segno meno iniziale per le durate negative. Le librerie standard la interpretano direttamente: java.time legge stringhe P e T con Period.parse e Duration.parse, e la stessa suddivisione esiste in molti altri linguaggi. Se producete pianificazioni, feed o API leggibili da macchina, questo formato è la lingua franca per "quanto dura".
Perché P1M non è un numero fisso di secondi
PT15M sono sempre 900 secondi. P1M no: un mese dura 28, 29, 30 o 31 giorni a seconda di dove inizia, quindi P1M diventa concreto solo quando lo si ancora a una data. Nemmeno P1D è garantito essere 24 ore. Nell'Unione Europea, gli orologi vanno avanti domenica 29 marzo 2026, quindi quel giorno di calendario dura 23 ore: aggiungere P1D (un giorno di calendario) e aggiungere PT24H (esattamente 24 ore) allo stesso sabato sera porta a istanti diversi. Ecco perché java.time ha due tipi, Period per le unità di calendario e Duration per i secondi esatti, e perché le librerie di date chiedono una data di riferimento prima di convertire una durata. Trattate i componenti Y, M, W e D come aritmetica di calendario, e solo H, M e S come quantità fisse di tempo.
Non è una durata: 20260424174227.0Z
Una stringa come 20260424174227.0Z sembra poter appartenere alla stessa famiglia, ma è un timestamp, non una durata, e nemmeno ISO 8601. È GeneralizedTime, un formato di ASN.1, la notazione usata dalle directory LDAP e dai certificati X.509. Va letta come campi a larghezza fissa: anno 2026, mese 04, giorno 24, poi 17:42:27, una frazione opzionale (.0), e Z per UTC. La si incontra in attributi di Active Directory come whenCreated e whenChanged, nelle esportazioni LDAP, e nei certificati, dove RFC 5280 impone GeneralizedTime per le date di validità a partire dall'anno 2050. Il dettaglio che la distingue dalla forma compatta di ISO 8601 è la T mancante: ISO scriverebbe lo stesso istante come 20260424T174227Z.

Decodificarne una senza leggere lo standard
Per una stringa occasionale, il nostro convertitore di durata ISO scompone qualsiasi durata P/T nei suoi componenti e nel suo totale in secondi, e ricostruisce la stringa a partire dai numeri che digitate. Quando quello che avete sono due orari anziché una stringa di durata (un turno che va dalle 22:00 alle 06:30, per esempio), il calcolatore di durata oraria fornisce il tempo trascorso, comprese le fasce che attraversano la mezzanotte. Entrambi funzionano interamente nel vostro browser: nulla di ciò che digitate lascia il vostro dispositivo. E per una lettura rapida senza alcuno strumento, due riflessi coprono la maggior parte dei casi: cercate la T per sapere se una M significa mesi o minuti, e ricordate che tutto ciò che sta a sinistra della T è aritmetica di calendario, non un numero fisso di secondi.
Strumenti citati in questo articolo
- Convertitore durata ISO 8601Analizza e converti le durate ISO 8601 (P1Y2M…) in componenti e secondi. Nel browser.
- Calcolatore durata orariaCalcola la durata tra due orari, inclusi gli intervalli notturni. Nel browser.
- Convertitore formato dataConverti una data in formati ISO, US, europeo, puntato, compatto e Unix. Nel browser.
Domande frequenti
PT1M è lo stesso di P1M?
No. La lettera M cambia significato a seconda del separatore T: P1M è un mese, PT1M è un minuto. È l'errore di lettura più comune di questo formato, e alcuni bug di API sono nati proprio da questa confusione. In caso di dubbio, cercate prima la T: tutto ciò che la precede si conta in anni, mesi, settimane e giorni; tutto ciò che la segue si conta in ore, minuti e secondi. Una durata ben formata non ha mai unità di ora prima della T né unità di data dopo di essa.
Come si scrivono 90 minuti come durata ISO 8601?
PT90M e PT1H30M sono entrambe valide e descrivono la stessa quantità di tempo. ISO 8601 non obbliga i componenti a rientrare nei loro intervalli convenzionali, quindi minuti sopra 59 o ore sopra 23 vanno benissimo. Gli interpreti accettano entrambe le grafie; quale delle due un sistema produce dipende dal fatto che normalizzi o meno. Se generate durate destinate a essere lette da persone, PT1H30M è più gentile; se confrontate durate nel codice, confrontate i loro secondi totali piuttosto che le stringhe, proprio perché due stringhe diverse possono significare la stessa cosa.
Qual è la differenza tra una durata e un intervallo?
Una durata dice quanto tempo, senza posizione sul calendario: P3D sono tre giorni, a partire da qualsiasi momento. Un intervallo ISO 8601 fissa una durata a date reali, scritto con una barra: 2026-07-04T00:00:00Z/P3D indica i tre giorni a partire dal 4 luglio 2026, e una coppia inizio/fine come 2026-07-04/2026-07-07 esprime lo stesso intervallo. Esistono anche intervalli ripetuti con un prefisso R: R5/2026-07-04T00:00:00Z/P1D significa cinque ripetizioni giornaliere a partire da quell'inizio. Gli intervalli risolvono l'ambiguità delle unità di calendario, perché P1M ancorato a una data ha sempre una lunghezza definita.