# ISO 8601

La norme ISO 8601 est une norme de l'Organisation internationale de normalisation (ISO) qui spécifie la représentation numérique de la date et de l'heure, respectivement basées sur le calendrier grégorien et le système horaire sur 24 heures. Cette notation, créée en 1988, est destinée à éviter toute confusion dans les communications internationales due au grand nombre de notations nationales différentes.
La représentation de la date et de l'heure est effectuée comme suit, si l'on souhaite être le plus précis possible :
   AAAA-MM-JJTHH:MM:SS,ss-/+FF:ff
* « AAAA » représente l'année sur quatre chiffres (par exemple : 1959) ;
* « MM » représente le mois sur deux chiffres (par exemple : 12 pour décembre) ;
* « JJ » représente le jour du mois sur deux chiffres (par exemple : 25 pour le 25e jour du mois) ;
* « T » pour time permet de séparer les indications de date (à gauche) et d'heure (à droite) ;
* « HH » représente l'heure en système 24 heures (par exemple : 15) ;
* « MM » représente les minutes (par exemple : 20) ;
* « SS » représente les secondes (par exemple : 49) ;
* « ss » représente les fractions de seconde sur autant d'unités que nécessaire (par exemple : 3342) ;
* « -/+» représente le fuseau horaire, où « + » permet d'indiquer un fuseau en avance sur UTC et « - » permet d'indiquer un fuseau en retard sur UTC ;
* « FF » représente le nombre d'heures d'avance ou de retard sur le fuseau horaire UTC ;
* « ff » représente le nombre de minutes d'avance ou de retard sur le fuseau horaire UTC.

## Historique

La première édition de la norme ISO 8601 a été publiée en 1988. Elle remplace et unifie plusieurs normes ISO traitant les différents aspects de notation des dates et des heures (normes ISO 2014, 2015, 2711, 3307 et 4031). Cette norme internationale est mise à jour en 2000 puis 2004 et en 2019, elle est scindée en 2 parties: ISO 8601-1:2019 (Règles de base) et 8601-2:2019 (Extensions).
La version de 1989 de la norme ISO est reprise par le système de normalisation français sous la référence NF EN 28601:1992. Cette norme française est annulée le 7 octobre 2011. Les éditions ISO de 2019 sont à utiliser à la place.
La notation numérique du plus étendu au plus précis « AAAA-MM-JJ » a été introduite par la norme ISO 2014:1976 ; la numérotation des semaines par l'ISO 2015:1976. Toutes deux sont intégrées dans la norme ISO 8601.
Le comité technique TC 154 s'occupe de la maintenance de la norme ISO 8601.

## Notation complète

   AAAA-MM-JJTHH:MM:SS,ss-/+FF:ff
Les notations suivantes sont utilisées pour symboliser les formats présentés :
* « AAAA »représente l’année grégorienne sur 4 chiffres fixes compris entre 1583 et 9999. Les années 0001 à 1582 nécessitent un accord mutuel, de même que l'extension aux années à plus de 4 chiffres. Il n'y a pas de représentation standard des années avant Jésus-Christ, mais certains le permettent avec un accord mutuel en utilisant le préfixe littéral « B » suivi de 4 chiffres à partir de 0001 pour la désignation classique des années sans 0000, ou le préfixe « U » suivi d'un signe et de 4 chiffres à partir de 0000 pour l’extension grégorienne proleptique du calendrier UTC.
* « − » est écrit littéralement (signe moins « - », ASCII ou mathématique « − ») dans les formats étendus (séparateur de date standard ISO), absent des formats de base.
* « MM » représente le numéro du mois dans l'année sur deux chiffres entre 01 et 12.
* « JJ » représente le numéro du jour dans le mois sur deux chiffres entre 01 et 31.
* « T » est écrit littéralement, mais peut être omis lorsqu'il n'y a pas de risque de confusion.
* « HH » représente l’heure du jour sur deux chiffres entre 00 et 24.
* « : » est écrit littéralement dans les formats étendus.
* « MM » représente la minute sur deux chiffres entre 00 et 59.
* « SS » représente la seconde sur deux chiffres entre 00 et 60.
* « , » est écrit littéralement dans les formats étendus, le point « . » étant généralement aussi accepté.
* « ss » représente la fraction de seconde sur un ou plusieurs chiffres.
* « -/+» représente le fuseau horaire, où « + » permet d'indiquer un fuseau horaire en avance sur UTC et « - » permet d'indiquer un fuseau horaire en retard sur UTC.
* « FF » représente le nombre d'heures d'avance ou de retard sur le fuseau horaire UTC.
* « ff » représente le nombre de minutes d'avance ou de retard sur le fuseau horaire UTC.

### Date et heure

Les éléments se suivent par ordre croissant de précision. Ainsi, le moins précis, l'année, vient en tête (sur 4 chiffres), suivi du mois (2 chiffres, de 01 à 12) et du quantième (de 01 à 31). Chaque élément est séparé de celui qui le précède par un tiret « - ». La date se fonde sur le calendrier grégorien. Ainsi, s'il était nécessaire de représenter des années avant la mise en application de ce calendrier (avant 1582-12-20 en France), une méthode de comptage entre les parties s'échangeant les informations devrait être convenue par avance.
L'indication de l'heure débute par la lettre « T » (pour time), suivie des éléments suivants, toujours ordonnés par précision croissante : heures (de 00 à 24), minutes (de 00 à 59) puis secondes (00 à 60) en utilisant deux-points « : » pour séparateur. Ceci peut être suivi d'une virgule « , » puis de décimales de seconde, en quantité nécessaire à la précision recherchée (exemple : « T15:23:56,9854 »). On rencontre parfois un point au lieu d'une virgule, en particulier chez les anglophones ; la norme tolère cet usage mais recommande la virgule.
Si la notation de l'heure utilise le numéro 24, alors les minutes et les secondes doivent être à 00. C'est une manière pratique en informatique de distinguer début et fin de journée quand la date n'est pas précisée. « T24:00 » équivaut strictement à « T00:00 » du jour suivant : « 2007-03-31T24:00 » est le même instant que « 2007-04-01T00:00 ».
L'écriture 60 pour les secondes représentera une 61e seconde. En effet, il est parfois nécessaire d'ajouter ou d’enlever une seconde intercalaire avant certains mois. « T23:59:60 » représenterait donc une seconde ajoutée entre « T23:59:59 » et « T24:00:00 ». Cependant, les horloges synchronisées n'indiquent généralement pas cette seconde intercalaire et préfèrent se resynchroniser progressivement.

### Fuseau horaire

Pour tous les formats acceptés dans la norme ISO 8601, il est possible de spécifier le fuseau horaire. Le signe de départ est positif « + » lorsque l’heure locale est en avance sur le temps universel (UTC), négatif « - » pour les fuseaux horaires en retard par rapport à UTC.
Il y a trois manières d’indiquer ce fuseau horaire :
* en ajoutant « +FFff » ou « −FFff », « FF » représentant le nombre d’heures et « ff » le nombre de minutes de décalage par rapport au temps universel ;
* en ajoutant « +FF:ff » ou « -FF:ff », le séparateur horaire « : » étant écrit ;
* en inscrivant littéralement un « Z » à la fin lorsqu’il s’agit de l’heure UTC. (« Z » pour méridien zéro, aussi connu sous le nom « Zulu » dans l’alphabet radio international).
Si l'heure est en UTC, il faut rajouter un « Z » après l'heure et sans espace. Ainsi « 09:30 UTC » est représenté « 09:30Z » ou « 0930Z ».

### Jour de l'année

Il est possible de représenter les dates en donnant l'année et le numéro du jour dans l'année. Un nombre sur 3 chiffres de 001 à 366. Par exemple : « 1970-033 » représente le 33e jour de l'année 1970, c.-à-d. le 2 février 1970.

### Semaine

La norme prévoit la possibilité d'écrire une date d'après sa semaine. Il faut commencer par la lettre « W » (pour week, « semaine » en anglais) suivi du numéro de semaine sur deux chiffres (et éventuellement du numéro du jour de 1 à 7). Par exemple :
* « 2005-W52-1 » correspond au premier jour (lundi) de la semaine 52 de l'année 2005, autrement dit, au lundi 26 décembre 2005, ou « 2005-12-26 » (les deux écritures sont équivalentes).
* « 2005-W52-7 » correspond au dernier jour de la semaine 52 de 2005, donc au 1er janvier 2006.
* « 2006-W01-1 » correspond au 2 janvier 2006, soit « 2006-01-02 ».
* « 2004W48 » désigne la semaine n$^o$ 48 de l'année 2004.
Tout le monde ne respecte pas la même convention de numérotation des semaines. Par exemple, le Canada et les États-Unis considèrent le dimanche plutôt que le lundi comme le premier jour de la semaine. Cette norme ISO a défini de façon stricte une règle de numérotation, reconnue internationalement et couramment utilisée :
* la semaine commence le lundi ;
* les jours de chaque semaine sont numérotés de 1 pour le lundi, à 7 pour le dimanche ;
* la semaine 1 est celle qui contient le premier jeudi de l'année.
Cela entraine plusieurs conséquences :
* La semaine 1 respecte la règle n°1, i.e. il n'y a pas de semaine partielle, elle peut donc commencer dès l'année précédente si son jeudi tombe entre le 1er janvier et le 3 janvier inclus.
* La semaine 1 (du lundi au dimanche) est la première à contenir la majorité de ses jours (au moins 4 jours) dans l'année. Elle contient systématiquement le 4 janvier. Elle contient systématiquement le premier jour ouvré de l'année en considérant que le 1er janvier, les samedis et les dimanches sont chômés. C'est aussi celle dont le lundi est le plus proche du jour de l'an. Elle commence au plus tôt le 29 décembre ou au plus tard le 4 janvier ;
* La dernière semaine de l'année (52 ou 53) est celle qui contient le dernier jeudi de l'année. Elle est la dernière à avoir la majorité de ses jours (au moins 4) dans l'année et contient systématiquement le 28 décembre. C'est aussi celle dont le dimanche est le plus proche du 31 décembre. Elle termine au plus tôt le 28 décembre ou au plus tard le 3 janvier ;
* Il n'y a pas de semaine zéro (la semaine 1 d'une année succède immédiatement à la dernière semaine de l'année précédente) ;
* Les premiers jours de la semaine 1; peuvent éventuellement être situés fin décembre de l'année précédente. De même, la dernière semaine (52 ou 53) d'une année peut avoir ses derniers jours au tout début de l'année suivante. Une année comporte toujours soit 52, soit 53 semaines au total ;
* Les années ont 52 semaines en général (365 jours = 52 × 7 + 1). Si une année a son 1er janvier un lundi, son 31 décembre tombe aussi un lundi (un mardi si année bissextile). Seules les années dont le jour de l'an est un jeudi auront 53 semaines (un mercredi ou un jeudi pour les années bissextiles).

## Notation abrégée

La norme prévoit la possibilité d'utiliser une notation abrégée.
L'indication du mois et de l'année seuls s'effectue de la manière suivante : « AAAA-MM », par exemple : « 2003-02 ». L'heure seule s'écrit de la manière suivante : « THH:MM:SS ».
Il est également possible d'abréger la notation du fuseau horaire comme suit : « THH:MM:SS,ss+/-FF », sans indication des minutes.
Il est également possible de retirer certains séparateurs tel que le tiret ou des deux-points. Il convient alors de les retirer tous (tous les tirets et/ou tous les deux-points) pour éviter les confusions. Une écriture prise hors de son contexte doit rester compréhensible et on doit en particulier identifier s'il s'agit d'une heure ou d'une date. (« 2005 » est une année, « T2005 » ou « 20:05 » sont des heures).
Pour exemple, ces notations sont équivalentes: « 20040204 », « 2004-02-04 », « 2004-W06-3 », « 2004W063 ».

## Intervalle entre deux dates

Il est également possible d'indiquer un intervalle de temps (entre deux dates précises). Pour ce faire, la norme préconise l'utilisation de la barre oblique « / » pour séparateur.
La barre oblique sépare la date de début et la date de fin. Si seul le dernier élément change il est possible d'omettre le début. Par exemple :
* « 2004-12-02T23:00/2005-01-01T12:30 » représente une période comprise entre le 2 décembre 2004 à 23 h et le 1er janvier 2005 à 12 h 30 ;
* « 2004-12-02T22:00/23:30 » représente une période comprise entre le 2 décembre 2004 à 22 h et le 2 décembre 2004 à 23 h 30 ;
* « 2004-12-02T22:00/15 » représente une période comprise entre le 2 décembre 2004 à 22 h et le 2 décembre 2004 à 22 h 15 ;
* « 2004-12-02T22/23 » représente une période comprise entre le 2 décembre 2004 à 22 h et le 2 décembre 2004 à 23 h ;
* « 2004-12-02/05 » représente une période comprise entre le 2 décembre 2004 à 0 h et le 5 décembre 2004 à 0 h.

## Durée

Une durée représente une quantité de temps dans l'absolu, sans commencer à un instant précis.
La norme recommande de commencer l'écriture par la lettre « P » (pour Period en anglais), puis indiquer les valeurs dans l'ordre croissant de précision, en y précisant pour chacune l'unité correspondante. Les unités sont représentées dans le tableau suivant.
Unités de valeur. :
| Symbole | Nom anglais | Nom Français |
| Y | Years | Ans |
| W | Weeks | Semaines |
| M | Months | Mois |
| D | Days | Jours |
| H | Hours | Heures |
| M | Minutes | Minutes |
| S | Seconds | Secondes |
Tout comme pour représenter une date, on utilise la lettre « T » pour séparer les jours des heures. Par exemple, « P18Y9M4DT11H9M8S » représente une durée de 18 ans, 9 mois, 4 jours, 11 heures, 9 minutes et 8 secondes.
Si le contexte nécessite de distinguer des durées positives ou négatives, il convient d'ajouter le signe « + » ou « - » en tête d'écriture.
Il est possible de combiner les notations d'intervalle et de durée pour indiquer une date de début et sa durée. Par exemple : « 2004-12-02/P3D » représente l'intervalle de temps d'une durée de 3 jours débutant le 2 décembre 2004. L'ordre d'écriture entre la date et la durée n'est pas définie, il est donc possible d'écrire la durée en premier, par exemple : « PT1H/2006-01-01 » représente l'heure qui suit le passage au jour de l'an de 2006).
Si la durée est répétitive, on précède la notation par la lettre « R » et, éventuellement le nombre de répétitions, par exemple : « R5/PT01:30 » représente cinq répétitions d'une heure et trente minutes.
Il est également possible de combiner les notations de date, d'heure, d'intervalle et de durée. Par exemple : « R11/1985-04-12T23:20:50/P1Y2M » représente 11 occurrences séparées entre elles d'un an et deux mois, en commençant la première le 12 avril 1985 à 23 h 20 min 50 s.