463 votes

Quelle est la différence entre les formats de date ISO 8601 et RFC 3339 ?

ISO 8601 y RFC 3339 semblent être deux formats courants sur le web. Dois-je utiliser l'un plutôt que l'autre ? L'un n'est-il qu'une extension ? Dois-je vraiment m'en soucier à ce point ?

354voto

ConroyP Points 24021

Est-ce qu'il s'agit d'une simple extension ?

En gros, oui - la RFC 3339 est répertoriée comme un profil de l'ISO 8601. Plus particulièrement, la RFC 3339 spécifie un représentation complète de la date et de l'heure (seules les secondes fractionnelles sont facultatives). La RFC présente également quelques petites différences subtiles. Par exemple, les représentations tronquées des années avec seulement deux chiffres ne sont pas autorisées -- la RFC 3339 exige des années à 4 chiffres, et la RFC n'autorise que l'utilisation d'un caractère de point comme point décimal pour les secondes fractionnées. La RFC autorise également le remplacement du "T" par un espace (ou un autre caractère), alors que la norme n'autorise que son omission (et uniquement en cas d'accord entre toutes les parties utilisant la représentation).

Je ne m'inquiéterais pas trop des différences entre les deux, mais au cas où votre cas d'utilisation les rencontrerait, cela vaudrait la peine d'y jeter un coup d'œil :

108voto

clay Points 304

Il y a beaucoup de différences entre l'ISO 8601 et le RFC 3339. Voici quelques exemples pour vous donner une idée :

2020-12-09T16:09:53+00:00 est une valeur de date et d'heure qui est conforme aux deux normes.

2020-12-09 16:09:53+00:00 utilise un espace pour séparer la date et l'heure. Ceci est autorisé par la RFC 3339 mais pas par la norme ISO 8601.

2020-12-09T16:09:53-00:00 spécifie un zéro négatif dans le décalage temporel. Ceci est autorisé par la RFC 3339 mais pas par la norme ISO 8601.

20201209T160953Z omet les traits d'union et les deux-points. Ceci est autorisé par la norme ISO 8601 mais pas par la RFC 3339.

La norme ISO 8601 permet des choses comme des dates ordinales telles que 2020-344 qui représente le 344e jour de l'année 2020. La RFC 3339 ne le permet pas.

Pour vos questions :

Est-ce qu'il s'agit d'une simple extension ?

Non. Comme indiqué ci-dessus, chaque norme supporte des variations syntaxiques non supportées par l'autre norme. Ainsi, une syntaxe n'est pas un sur-ensemble ou une extension de l'autre.

Dois-je utiliser l'un plutôt que l'autre ?

Bien sûr, cela dépend de votre scénario. Une stratégie générale sûre consiste à générer des chaînes de date et d'heure qui sont valables pour les deux normes.

Une autre bonne stratégie générale consiste à utiliser une bibliothèque standard existante pour l'analyse et le formatage des chaînes de date et d'heure et à ne pas écrire d'implémentations personnalisées, sauf si vous traitez un scénario véritablement personnalisé.

Est-ce que je dois vraiment m'en soucier à ce point ?

C'est à vous de voir. La plupart des développeurs habituels qui traitent des chaînes de date et d'heure devraient avoir une compréhension de haut niveau mais n'ont pas besoin de se plonger dans les détails.

22voto

Zefram Points 21

La RFC 3339 est principalement un profil de la norme ISO 8601, mais elle est en fait incompatible avec elle en empruntant la spécification du fuseau horaire "-00:00" de la RFC 2822. Ceci est décrit dans l'article de Wikipedia.

6voto

jojo hohanon Points 21

Il semble difficile et/ou coûteux d'avoir accès à la spécification ISO. C'est pourquoi nous voyons de nombreux liens vers la page wikipedia à la place.

Pour cette seule raison, je préfère la RFC3339 : vous pouvez aller directement à la source primaire.

4voto

Andy Hume Points 15186

Le RFC 3339 définit un profil de l'ISO 8601 pour l'utilisation dans les protocoles et les normes Internet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X