ISO 8601

La norme internationale ISO 8601 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 de 24 heures. Cette notation, créée en 1988, est particulièrement destinée à éviter tout risque de confusion dans les communications internationales dû au grand nombre de notations nationales différentes. Elle a en outre de nombreux avantages pour une utilisation informatique par rapport aux autres notations.

Il y a six niveaux de granularité dans ce format, selon les applications. Pour cette raison, il est possible d'omettre certains éléments.

Exemples :

La date ISO courante :
2017-05-11
L'heure ISO courante :
23:10:29Z
La date et l'heure ISO courantes :
2017-05-11T23:10:29Z
ou encore :
2017-W19-4T23:10:29Z

Historique

La première édition de la norme ISO 8601 a été publiée en 1988. Elle a remplacé et unifié plusieurs normes ISO traitant les différent aspects de notation des dates et des heures (normes ISO 2014, 2015, 2711, 3307 et 4031)[1]. Cette norme internationale a été mise à jour en 2000 puis 2004[2].

La version de 1989 de la norme ISO était reprise par le système de normalisation français sous la référence NF EN 28601:1992. Cette norme française a été annulée le 07 octobre 2011[3].

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[4].

Principe

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-10-15 en France), une méthode de comptage entre les parties s'échangeant les informations devrait être convenue par avance.

Puis est indiquée l'heure de la journée, qui débute par la lettre T (pour time, l’heure de la journée en anglais), 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.

Remarques

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) (fuseaux horaire à l’Est du méridien horaire de Greenwich : fuseaux horaires d’Europe centrale, Afrique centrale et de l’Est, Asie, Pacifique Ouest et central). Négatif (−) sinon (fuseaux horaires de quelques pays d’Europe occidentale ou d’Afrique occidentale, Amériques, Pacifique Est). Il y a trois manières d’indiquer ce fuseau horaire :

  1. en ajoutant +hhmi ou hhmi dans les formats de base, hh représentant le nombre d’heures et mi le nombre de minutes de décalage par rapport au temps universel (le signe moins est habituellement le caractère ASCII tiret-moins, mais certaines représentations permettent le signe moins mathématique, dont la largeur est identique à celle du signe plus) ;
  2. en ajoutant +hh:mi ou -hh:mi dans les formats étendus, le séparateur horaire : étant écrit littéralement ;
  3. en inscrivant littéralement un Z final lorsqu’il s’agit de l’heure UTC. (Z pour méridien Zéro, ou (en) Zero meridian. Aussi connu sous le nom Zulu –prononcer zoulou– dans l’alphabet radio international).

Pour éviter d’éventuelles confusions, il s'agit bien d’un décalage exprimé depuis l’heure UTC (et non pas vers). Ce qui est logique puisqu’il s’agit d’une indication de fuseau horaire. Ainsi T09:00:00+01:00 correspond à T08:00:00Z (9 heures dans le fuseau ayant une heure de plus que l’UTC donc 8 heures en UTC). 09:00+01:00 ne représente pas l'addition de 09:00 et de 01:00, mais plutôt cette addition-ci: 09:00 = UTC +01:00.

Formats habituels

Ci-dessous, les notations suivantes sont utilisées pour symboliser les formats présentés :

En cas de notation de fractions (sur les heures, les minutes ou les secondes), le séparateur décimal est une virgule ou un point, la virgule étant le signe préféré.

Les formats suivants peuvent alors être utilisés pour indiquer :

format de base : "aaaa" (ex : 1997)
pas de format étendu
format de base : "aaaamm" (ex : 199707)
format étendu : "aaaamm" (ex : 1997−07)
format de base : "aaaammqq" (ex : 19970716)
format étendu : "aaaammqq" (ex : 1997−07−16)
format de base : "aaaaqqq" (ex : 1997206)
format étendu : "aaaaqqq" (ex : 1997−206)
format de base : "AAAAWwwj" (ex : 2004W453)
format étendu : "AAAA−Wwwj" (ex : 2004−W45−3)
format de base : "aaaammqqThhmizzzzz" (ex : 19970716T1920+0100)
format étendu : "aaaammqqThh:mizzzzzz" (ex : 1997−07−16T19:20+01:00)
format de base : "aaaammqqThhmisszzzzz" (ex : 19970716T192030+0100)
format étendu : "aaaammqqThh:mi:sszzzzzz" (ex : 1997−07−16T19:20:30+01:00)
format de base : "aaaammqqThhmissnzzzzz" (ex : 19970716T1920304+0100)
format étendu : "aaaammqqThh:mi:ss,nzzzzzz" (ex : 1997−07−16T19:20:30,4+01:00)
format de base : "Thhzzzzz" (ex : T19+0100)
format étendu : "Thhzzzzzz" (ex : T19+01:00)
format de base : "Thhmizzzzz" (ex : T1920+0100)
format étendu : "Thh:mizzzzzz" (ex : T19:20+01:00)
format de base : "Thhmisszzzzz" (ex : T192030+0100)
format étendu : "Thh:mi:sszzzzzz" (ex : T19:20:30+01:00)
format de base : "Thhmissnzzzzz" (ex : T1920304+0100)
format étendu : "Thh:mi:ss,nzzzzzz" (ex : T19:20:30,4+01:00)

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. Donc un nombre sur 3 chiffres de '001' à '365' (voire '366' quand nécessaire). Exemple: 1970-033 représente le 33e jour de l'année 1970. Autrement dit le . Cette notation est distinctive grâce aux 3 chiffres après l'année. (Le mois seul ne prendrait que deux chiffres. Le mois et un quantième nécessiteraient quatre chiffres en notation abrégée.)

Numéro de semaine

Article détaillé : Numérotation ISO des semaines.

Système de numérotation

L'industrie a pris l'habitude de numéroter les semaines de l'année (semaine 1, 2,... 52 voire 53) pour s'organiser et planifier sa production. En pratique, tout le monde ne respecte pas nécessairement la même convention de numérotation (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 :

  1. la semaine commence le lundi ;
  2. les jours de chaque semaine sont numérotés de 1 (un) pour le lundi, à 7 (sept) pour le dimanche ;
  3. la semaine 1 est celle qui contient le premier jeudi de l'année.

Remarques et conséquences :

Notation normalisée

La norme prévoit également 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. Soit autrement dit le lundi 26 décembre 2005 (ou 2005-12-26; les deux écritures sont équivalentes).

De la même façon, 2005-W52-7 correspond au dimanche de la dernière semaine de 2005: donc au  !

(2006-W01-1 correspond au lundi 2 janvier 2006, soit 2006-01-02)

2004W48 désigne la semaine no 48 de l'année 2004.

Algorithme informatique

Le calcul automatisé du numéro de semaine en informatique reste simple mais néanmoins non trivial, à cause des semaines charnières entre chaque année. Cette réflexion mérite donc d'être partagée.

Dans de nombreux langages de programmation informatiques, les outils comptent les jours de la semaine en partant du dimanche (valeur zéro), puis 1 pour le lundi, jusqu'à 6 pour le samedi. Dans certains pays, la semaine commence le dimanche et, mathématiquement (modulo 7), 0 et 7 reviennent au même dans les tests. Pour l'affichage, cela devient un cas particulier à traiter. Il existe parfois une fonction donnant directement une numérotation normalisée.

Pour calculer le numéro ISO de la semaine contenant une date 'D' donnée, il y a différents algorithmes. Cela peut être par exemple :

Certains algorithmes utilisent des exceptions peu justifiables, voire retournent des valeurs erronées pour certaines dates. L'avantage de l'algorithme précédent est d'être fiable, tout en profitant des fonctions généralement disponibles (le compte des années bissextiles ou du nombre de jours est déjà implémenté).

Si on sait J le jour correspondant à une date (de J=1 pour lundi, à J=7 pour dimanche), en adaptant les fonctions existantes si nécessaire, alors le jeudi de la même semaine est situé (J-4) jours plus tôt (ou plus tard si négatif). Le lundi associé est (J-1) jours plus tôt.

La notation abrégée

Il est possible de n'indiquer que les éléments utiles. On peut par exemple indiquer le mois de février 2003 par: 2003-02, sans devoir indiquer un jour précis ou un horaire. De manière générale on peut retirer toute information inutile (par exemple la date si seule l'heure est manipulée). Ce qui donne par exemple: T23:45.

Dans un contexte donné, les notations doivent toutes être abrégées de la même manière. Donc toutes sur un même nombre de caractères. Toutes avec les mêmes informations. Sinon, on perd l'avantage de cette normalisation pour la cohérence et la facilité du tri.

Autre exemple, si le fuseau horaire est indiqué, il n'est pas toujours nécessaire d'indiquer les minutes (souvent inutiles). Ainsi T23:05+05:00 pourra s'abréger T23:05+05 voire T2305+05 d'après ce qui suit.

Enfin, si une taille compacte est requise au détriment de la lisibilité, il est possible de retirer certains séparateurs (tiret ou 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

Un dernier raccourci consiste à remplacer les éléments tronqués par un tiret '-'. Il est rarement employé. Toutefois il peut devenir nécessaire pour éviter des confusions. En omettant l'année, on noterait le 2 décembre ainsi :
"--1202". On pourrait le réduire à "-1202" sans confusion avec "1202" seul qui représenterait l'année 1202.

2003---12 ou 2003--12 représenteraient le 12 de n'importe quel mois de l'an 2003, sans confusion avec 2003-12 qui représenterait décembre 2003.

Les durées et intervalles

Il est également possible d'indiquer une durée (mesure d'un temps écoulé) ou un intervalle de temps (entre deux dates précises). Pour ce faire on utilisera la barre oblique ' / ' pour séparateur.

Intervalle entre deux dates

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 de ne pas ré-écrire le début. Quelques exemples :

Durée

Une durée représente une quantité de temps dans l'absolu, sans commencer à un instant précis. Il faut commencer l'écriture par la lettre P (pour Period en anglais). Exemple :

P18Y9M4DT11H9M8S qui représente une (longue) durée de 18 ans, 9 mois, 4 jours, 11 heures, 9 minutes et 8 secondes. On remarque sur cet exemple l'emploi d'initiales anglaises pour séparer les éléments ( Years, Months, Days, Hours, Minutes et Seconds). On remarque toujours la présence du T séparant les jours des heures. Ceci permet de lever l'ambigüité entre P1M (1 mois) et PT1M (une minute). On pourrait aussi compter en semaines en réutilisant la lettre 'W' : P3W représente par exemple une durée de 3 semaines.

Si le contexte nécessitait de distinguer des durées positives ou négatives, il suffit d'ajouter le signe '+' ou '-' en tête d'écriture.

Une borne et la durée

On peut enfin combiner les deux notations et indiquer une période en fonction de sa date de début et sa durée. Exemple :

2004-12-02/P3D étant l'intervalle de temps d'une durée de 3 jours débutant le 2 décembre 2004.

Ou encore, à l'inverse, on peut indiquer d'abord la durée puis la date finale ('PT1H/2006-01-01' représente l'heure qui précède le passage au jour de l'an de 2006).

Récurrence d'une durée

Si la durée est répétitive, on précède la notation par la lettre R. Exemple: R/PT01 signifie «toutes les heures».

La barre oblique '/' permet un ajout après le R pour indiquer (éventuellement) un nombre de répétitions. R5/PT01:30 signifie donc « cinq occurrences, espacées de une heure trente entre elles ».

La durée entre chaque occurrence peut être indiquée par toutes les méthodes citées précédemment. (En indiquant deux dates ou en utilisant le symbole P pour des intervalles ou durées; avec ou sans indication d'une date de départ ou de fin.)

R12/1985-04-12T23:20:50/P1Y2M signifierait « 12 occurrences séparées entre elles de un an et deux mois, en commençant la première le 12 avril 1985 à 23h20 et cinquante secondes »

Avantages

Les avantages de cette normalisation sont les suivants :

Notes et références

  1. « ISO 8601:1988, revisions » (consulté le 31 mai 2014)
  2. (en) « Data elements and interchange formats -- Information interchange -- Representation of dates and times » (consulté le 25 juin 2014)
  3. AFNOR, NF EN 28601 juin 1993 Annulée
  4. « ISO/TC 154 Processus, éléments d'informations et documents dans le commerce, l'industrie et l'administration » (consulté en 31 juin 2014)
  5. norme ISO 8601:2004(E), ISO — ISO 4.3.2 NOTE: By mutual agreement of the partners in information interchange, the character [T] may be omitted in applications where there is no risk of confusing a date and time of day representation with others defined in this International Standard.
  6. norme ISO 8601:2004(E), ISO — ISO 4.2.2.4 … the decimal fraction shall be divided from the integer part by the decimal sign specified in ISO 31-0, i.e. the comma [,] or full stop [.]. Of these, the comma is the preferred sign.

Liens externes

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.