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

281

ISO 8601 et RFC 3339 semblent être deux formats courants sur le Web. Dois-je utiliser l'un sur l'autre? Est-ce juste une extension? Ai-je vraiment besoin de me soucier si mal?

Mark Amery
la source
42
J'ai changé le lien vers le RFC de ietf.org/rfc/rfc3339.txt à la version HTML à tools.ietf.org/html/rfc3339 . Lors de la liaison à des RFC, vous devez toujours créer un lien vers les versions HTML à tools.ietf.org/html . Non seulement ils sont plus faciles à naviguer grâce aux liens de section, mais, surtout, ils répertorient en haut tous les RFC qui ont mis à jour ou obsolète le RFC que vous lisez. Les gens citent involontairement des RFC obsolètes tout le temps sur Stack Overflow, et je vais continuer à répéter ce conseil jusqu'à ce que ce problème disparaisse. (Pour éviter tout doute, ce RFC n'est pas obsolète.)
Mark Amery

Réponses:

239

Est-ce juste une extension?

À peu près, oui - RFC 3339 est répertorié comme un profil ISO 8601. Plus particulièrement, RFC 3339 spécifie une représentation complète de la date et de l'heure (seules les fractions de seconde sont facultatives). Le RFC présente également de 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 requiert des années à 4 chiffres, et la RFC permet uniquement d'utiliser un caractère de période comme point décimal pour les fractions de seconde. La RFC permet également de remplacer le "T" par un espace (ou un autre caractère), tandis que la norme ne permet que son omission (et uniquement lorsqu'il existe un 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 se heurterait à eux, cela vaut la peine de jeter un coup d'œil à:

ConroyP
la source
11
C'est l'inverse, l'ISO permet d'omettre 'T' mais la RFC 3339 le requiert tools.ietf.org/html/rfc3339#page-12
Java Guy
21
Désolé Java Guy, mais ce n'est pas tout à fait correct. L'annexe à laquelle vous vous référez est à titre informatif uniquement et la restriction vise à simplifier la grammaire. La note à la fin de la section 5.6 indique clairement qu'un espace peut être utilisé à des fins de lisibilité, en référence à la mention précédente de lisibilité qui fait l'objet de la section 5.2. pour citer: "Les applications utilisant cette syntaxe peuvent choisir, pour des raisons de lisibilité, de spécifier une date complète et une heure complète séparées (disons) par un espace."
Greg A. Woods du
8
@JavaGuy L'annexe à laquelle vous avez lié ne parle même pas de la syntaxe RFC 3339 - elle est intitulée ISO 8601 ABNF collecté et est une tentative de décrire formellement la grammaire d' ISO 8601 en utilisant ABNF . Rien de ce qu'il dit ne doit être considéré comme une preuve de la syntaxe de datetime RFC 3339.
Mark Amery
3
FWIW: Il a été discuté sur la liste des coreutils: lists.gnu.org/archive/html/bug-coreutils/2006-05/msg00019.html
Frederick Nord
9
Je suis l'auteur que Justin (commentaire précédent) a contacté (bien qu'il ne soit pas responsable de la plupart des travaux lourds là-bas). Je confirme son commentaire. En règle générale, je suggère que les documents de spécification tels que RFC3339 spécifient plutôt que d' exiger - c'est le contexte d'utilisation qui détermine ce qui est requis . Tant qu'il est clair ce qui est prévu, référencer une production de syntaxe spécifique est très bien. (Ce n'est pas vraiment différent de ce que la RFC3339 fait elle-même en faisant une référence sélective à ISO8601.) Voir aussi la NOTE dans la section 5.6 .
Graham Klyne
20

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

Zefram
la source
4

Vous ne devriez pas avoir à vous en soucier autant. La RFC 3339, selon elle-même, est un ensemble de normes dérivées de l'ISO 8601. Il y a cependant quelques différences minuscules, et elles sont toutes décrites dans la RFC 3339. Je pourrais les parcourir toutes ici, mais vous feriez probablement mieux il suffit de lire le document par vous-même si vous êtes inquiet:

http://tools.ietf.org/html/rfc3339

David Morton
la source