Aller au contenu

ISO 8601 expliqué : le format de date international que tout développeur devrait utiliser

Pourquoi YYYY-MM-DD est sans ambiguïté, comment la norme gère les semaines, durées et intervalles, et pourquoi elle alimente bases de données et APIs JSON.

· 10 min de lecture · Gabriel

Écrire la date au format ISO 8601
Sommaire

Le problème que résout ISO 8601

Que signifie 03/04/05 ? Aux États-Unis, c’est le 4 mars 2005. Dans la plupart de l’Europe, c’est le 3 avril 2005. Au Japon, c’est le 5 avril 2003. Ce genre d’ambiguïté a causé des contrats échoués, des vols manqués, des factures payées en double et au moins un désastre célèbre de migration de base de données. ISO 8601, publié pour la première fois en 1988 et révisé récemment sous les noms ISO 8601-1:2019 et ISO 8601-2:2019, existe pour faire disparaître tout cela.

Le format de base

La règle principale est simple : écrire les dates au format AAAA-MM-JJ, toujours avec une année à quatre chiffres et toujours avec l’unité la plus grande en premier. Le format se trie correctement en tant que chaîne brute, ce qui en fait la valeur par défaut dans les bases de données, les fichiers journaux et les noms de fichiers.

Heures et dates-heures combinées

Les heures utilisent la notation 24 heures : HH:MM:SS. Une date et une heure combinées utilisent un "T" littéral comme séparateur : 2025-01-25T14:30:00. Le fuseau horaire est ajouté avec un "Z" pour UTC ou un décalage signé comme +02:00. Un instant pleinement qualifié ressemble à 2025-01-25T14:30:00+01:00.

Dates par semaine

ISO 8601 définit aussi un calendrier basé sur les semaines que beaucoup d’entreprises utilisent pour le reporting fiscal. Les semaines commencent le lundi. La semaine 1 est celle qui contient le premier jeudi de l’année. Une date par semaine s’écrit AAAA-Wss-J, par exemple 2025-W04-6. C’est pourquoi certaines années ont 52 semaines ISO et d’autres 53.

Dates ordinales

Un format moins courant mais utile est la date ordinale : AAAA-JJJ, où JJJ est le jour de l’année de 001 à 365 (ou 366 dans une année bissextile). La NASA, les météorologues et l’industrie aérienne les utilisent fréquemment.

Durées et intervalles

ISO 8601 définit aussi une syntaxe pour les durées. Une durée commence par la lettre "P" (pour "period") et utilise des désignateurs d’une seule lettre. Exemples :

  • P1Y — un an
  • P3M — trois mois
  • PT2H30M — deux heures trente minutes
  • P1Y2M10DT2H30M — un an, deux mois, dix jours, deux heures et demie

Un intervalle est constitué de deux dates-heures séparées par une barre oblique : 2025-01-01T00:00:00Z/2025-12-31T23:59:59Z. Un intervalle répété est préfixé par R[n]/.

RFC 3339 : le profil internet

La plupart des protocoles internet n’utilisent pas directement ISO 8601. Ils utilisent RFC 3339, une spécification de 2002 par Graham Klyne et Chris Newman qui définit un sous-ensemble strict d’ISO 8601. RFC 3339 est utilisé par les APIs JSON, les fichiers journaux, les jetons OAuth et les en-têtes d’e-mail.

Conseils pratiques pour développeurs

  • Stockez toujours les horodatages en UTC. Convertissez en heure locale uniquement à l’affichage.
  • Écrivez toujours des années à quatre chiffres.
  • Utilisez AAAA-MM-JJ dans les noms de fichiers ; ils se trient chronologiquement sans logique supplémentaire.
  • Si votre API renvoie une date, renvoyez-la en chaîne ISO 8601 en UTC, pas en timestamp Unix.
  • Analysez avec une vraie bibliothèque. Les analyseurs regex faits maison finissent par échouer.
  • Attention à l’année-semaine ISO. 2024-12-30 est dans l’année-semaine ISO 2025.

Pour aller plus loin

  • ISO, "ISO 8601-1:2019 Date and time — Representations for information interchange — Part 1: Basic rules" (2019).
  • Klyne, G. et Newman, C., "Date and Time on the Internet: Timestamps", IETF RFC 3339 (juillet 2002).

← Retour à tous les articles