La norme internationale ISO 8601 spécifie la représentation numérique de la date et de l'heure. Cette notation est particulièrement destinée à éviter tout risque de confusion dans les communications internationales dû au grand nombre de notations nationales différentes. De plus, cette notation a de nombreux avantages pour une utilisation informatique par rapport aux autres notations. Elle est reprise par la norme française sous la référence NF EN 28601.
Il y a 6 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: |
---|
2007-06-28T21:41:54Z |
ou encore: |
2007-W26-4T21:41:54Z |
On commence par les éléments les moins précis pour aller vers les plus détaillés. Donc l'année vient en tête (sur 4 chiffres), suivie du mois (sur 2 chiffres, de '01' à '12') et enfin 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 base 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), il faudrait convenir par avance d'une méthode de comptage entre les parties s'échangeant les informations.
Puis on indique l'heure de la journée qui débute par la lettre T (pour Time, soit heure en anglais). Suivie des éléments utiles, dans cet ordre: heures (de '00' à '24'), minutes (de '00' à '59') puis secondes ('00' à '60') en utilisant deux-points ':' pour séparateur.
Et éventuellement suivi encore d'une virgule ',' puis de décimales de seconde. Notons que l'on rencontre parfois un point (toléré) au lieu d'une virgule, en particulier chez les anglophones. C'est toutefois bien la virgule qui est préférée par la norme.
Remarques importantes:
Il est bien entendu que pour l'indication des heures habituelles ces possibilités sont inutiles. Par exemple, les horloges synchronisées n'indiquent généralement pas cette seconde intercalaire et préfèrent se resynchroniser progressivement. Utilisée ou non, toujours est-il que la norme a bel et bien prévu l'indication de ces secondes intercalaires.
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 trois manières d’indiquer ce fuseau horaire :
Pour éviter d’éventuelles confusions, notons qu’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).
Ci-dessous, les notations suivantes sont utilisées pour symboliser les formats présentés :
Les formats suivants peuvent alors être utilisés pour indiquer :
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 2 février 1970. 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.)
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éfinit de façon stricte une règle de numérotation, reconnue internationalement et couramment utilisée:
Remarques et conséquences:
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 1er janvier 2006 !
(2006-W01-1 correspond au lundi 2 janvier 2006, soit 2006-01-02)
2004W48 désigne la semaine n°48 de l'année 2004.
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.
Il sera précieux de noter que 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. Ce n'était pas complètement idiot puisque dans certains pays la semaine commence le dimanche et que mathématiquement (modulo 7) 0 et 7 reviennent au même dans les tests. Mais, pour l'affichage, cela devient un cas particulier à traiter. Il existe parfois une fonction donnant directement une numérotation normalisée.
Pour écrire une fonction calculant le numéro ISO de la semaine à partir d'une date donnée, un bon algorithme, efficace et rapide, peut par exemple être le suivant:
Certains algorithmes utilisent des exceptions plus ou moins justifiables, voire retournent des valeurs erronées pour certaines dates. L'avantage de celui-ci 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à implanté).
Note: si on sait J le jour correspondant à une date (de J=1 pour lundi, à J=7 pour dimanche), en adaptant les fonctions existentes 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. D'éventuels exemples peuvent être donnés en page de discussion de l'article.
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:
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.
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.
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 :
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. Il est vrai qu'ici la présence des H, M et S rend le T redondant. 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.
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 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).
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"
Les avantages de cette normalisation sont les suivants :