Article
Durées ISO 8601 : ce que veut dire P1DT2H
Une réponse de l'API YouTube annonce qu'une vidéo dure PT4M13S. Une invitation de calendrier transporte P15DT5H0M20S. Un annuaire horodate un compte avec 20260424174227.0Z, qui semble de la même famille mais est tout autre chose. Ces chaînes compactes suivent des règles qui méritent d'être connues, car les lire de travers transforme des minutes en mois. Voici un tour du format de durée ISO 8601 : ce que signifient les lettres, où le format apparaît, et sa grande subtilité, à savoir qu'une durée écrite ainsi n'est pas toujours une quantité de temps fixe.
P, T, et ce que signifient les lettres
Une durée ISO 8601 commence par P (période). Viennent ensuite les composantes de date, chacune un nombre suivi de sa lettre d'unité : Y pour les années, M pour les mois, W pour les semaines, D pour les jours. Un T sépare la partie date de la partie heure : H pour les heures, M pour les minutes, S pour les secondes. Chaque composante est facultative ; on n'écrit que ce dont on a besoin. PT15M fait 15 minutes, P1DT2H un jour et deux heures, P3W trois semaines. Le T n'est pas décoratif : M signifie mois avant lui et minutes après lui, donc P1M est un mois alors que PT1M est une minute. La dernière composante présente peut porter une fraction décimale, comme PT0.5S pour une demi-seconde. Et les unités ne débordent pas d'elles-mêmes : PT90M est une façon parfaitement valide d'écrire une heure et demie.

Où l'on croise vraiment ce format
Cette syntaxe est discrètement partout. L'API YouTube Data rapporte la longueur de chaque vidéo en durée ISO 8601 (PT4M13S). Le HTML accepte des durées dans l'attribut datetime de l'élément time. Les invitations de calendrier s'en servent : le standard iCalendar (RFC 5545) écrit les longueurs d'événements comme PT1H0M0S, en retirant toutefois années et mois de la grammaire. Le type xs:duration de XML Schema couvre la forme complète et autorise même un moins en tête pour les durées négatives. Les bibliothèques standard le lisent directement : java.time analyse les chaînes P et T avec Period.parse et Duration.parse, et la même séparation existe dans bien d'autres langages. Si vous produisez des plannings, des flux ou des API lisibles par machine, ce format est la langue commune du « combien de temps ».
Pourquoi P1M n'est pas un nombre fixe de secondes
PT15M fait toujours 900 secondes. P1M non : un mois dure 28, 29, 30 ou 31 jours selon son point de départ, donc P1M ne devient concret qu'ancré à une date. Même P1D n'est pas garanti à 24 heures. Dans l'Union européenne, les horloges avancent le dimanche 29 mars 2026 : ce jour civil dure 23 heures, et ajouter P1D (un jour de calendrier) ou PT24H (exactement 24 heures) au même samedi soir mène à des instants différents. C'est pourquoi java.time a deux types, Period pour les unités de calendrier et Duration pour les secondes exactes, et pourquoi les bibliothèques de dates demandent une date de référence avant de convertir une durée. Traitez les composantes Y, M, W et D comme de l'arithmétique de calendrier, et seules H, M et S comme des quantités de temps fixes.
Pas une durée : 20260424174227.0Z
Une chaîne comme 20260424174227.0Z semble appartenir à la même famille, mais c'est un horodatage, pas une durée, et pas de l'ISO 8601 non plus. C'est du GeneralizedTime, un format issu d'ASN.1, la notation des annuaires LDAP et des certificats X.509. Lisez-le en champs de largeur fixe : année 2026, mois 04, jour 24, puis 17:42:27, une fraction facultative (.0), et Z pour UTC. On le rencontre dans les attributs Active Directory comme whenCreated et whenChanged, dans les exports LDAP, et au cœur des certificats, où la RFC 5280 impose GeneralizedTime pour les dates de validité à partir de l'an 2050. L'indice qui le distingue de la forme compacte d'ISO 8601 est le T manquant : ISO écrirait le même instant 20260424T174227Z.

Décoder sans lire la norme
Pour une chaîne ponctuelle, notre convertisseur de durées ISO décompose n'importe quelle durée P/T en composantes et en total de secondes, et reconstruit la chaîne depuis des nombres que vous saisissez. Quand vous partez de deux heures d'horloge plutôt que d'une chaîne (un service de 22:00 à 06:30, par exemple), le calculateur de durée donne le temps écoulé, passages de minuit compris. Les deux tournent entièrement dans votre navigateur : rien de ce que vous tapez ne quitte votre appareil. Et pour lire vite sans aucun outil, deux réflexes couvrent l'essentiel : repérer le T pour savoir si un M veut dire mois ou minutes, et se rappeler que tout ce qui est à gauche du T relève du calendrier, pas d'un nombre fixe de secondes.
Outils mentionnés dans cet article
- Convertisseur de durée ISO 8601Analysez et convertissez des durées ISO 8601 (P1Y2M…) en composants et secondes. Dans le navigateur.
- Calcul de durée horaireCalculez la durée entre deux heures, y compris la nuit. Dans le navigateur.
- Convertisseur de format de dateConvertissez une date en formats ISO, US, européen, pointé, compact et Unix. Dans le navigateur.
Questions fréquentes
PT1M et P1M, c'est pareil ?
Non. La lettre M change de sens en traversant le séparateur T : P1M est un mois, PT1M est une minute. C'est le contresens le plus courant sur ce format, et des bugs d'API ont été livrés à cause de lui. En cas de doute, cherchez d'abord le T : tout ce qui le précède se compte en années, mois, semaines et jours ; tout ce qui le suit en heures, minutes et secondes. Une durée bien formée n'a jamais d'unités de temps avant le T ni d'unités de date après.
Comment écrire 90 minutes en durée ISO 8601 ?
PT90M et PT1H30M sont tous deux valides et décrivent la même quantité de temps. ISO 8601 n'oblige pas les composantes à rester dans leurs plages habituelles : des minutes au-delà de 59 ou des heures au-delà de 23 sont permises. Les analyseurs acceptent les deux écritures ; celle qu'un système émet dépend de sa normalisation. Si vous générez des durées destinées à des humains, PT1H30M est plus lisible ; si vous comparez des durées dans du code, comparez leurs totaux de secondes plutôt que leurs chaînes, précisément parce que deux chaînes différentes peuvent dire la même chose.
Quelle différence entre une durée et un intervalle ?
Une durée dit combien de temps, sans position sur le calendrier : P3D fait trois jours, en partant de n'importe où. Un intervalle ISO 8601 épingle une durée à des dates réelles, avec une barre oblique : 2026-07-04T00:00:00Z/P3D désigne les trois jours à partir du 4 juillet 2026, et une paire début/fin comme 2026-07-04/2026-07-07 exprime la même plage. Il existe aussi des intervalles répétés avec un préfixe R : R5/2026-07-04T00:00:00Z/P1D signifie cinq répétitions quotidiennes depuis ce départ. L'intervalle lève l'ambiguïté des unités de calendrier, puisqu'un P1M ancré à une date a toujours une longueur bien définie.