2009-02-06 11 views
154

ISO 8601 et RFC 3339 semblent être deux formats qui sont communs au Web. Devrais-je utiliser l'un sur l'autre? Est-ce juste une extension? Est-ce que j'ai vraiment besoin de m'inquiéter?Quelle est la différence entre les formats de date ISO 8601 et RFC 3339?

+16

J'ai changé le lien vers la RFC de http://www.ietf.org/rfc/rfc3339.txt à la version HTML à http://tools.ietf.org/html/rfc3339. Lorsque vous établissez des liens vers des RFC, vous devez toujours créer un lien vers les versions HTML à l'adresse http://tools.ietf.org/html. Non seulement sont-ils plus faciles à naviguer grâce aux liens de section, mais, surtout, ils listent au sommet les RFC qui ont mis à jour ou annulé le RFC que vous lisez. Les gens citent sans le savoir 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.) –

Répondre

127

un est juste une extension?

Quasiment, oui - RFC 3339 est répertorié comme un profil de l'ISO 8601. Plus particulièrement RFC 3339 nécessite une représentation complète de date et l'heure (seulement des fractions de seconde sont en option). Le RFC a également quelques petites différences subtiles. Par exemple, les représentations tronquées d'années avec seulement deux chiffres ne sont pas autorisées - la RFC 3339 exige des années à 4 chiffres, et la RFC ne permet qu'un caractère de période à utiliser comme point décimal pour les fractions de secondes. Le RFC permet également de remplacer le "T" par un espace (ou un autre caractère), alors que la norme ne permet que de l'omettre (et seulement s'il y a un accord entre toutes les parties utilisant la représentation).

Je vous inquiétez pas trop sur les différences entre les deux, mais tout hasard votre cas d'utilisation fonctionne pour eux, il serait intéressant de vous en prenant un coup d'oeil à:

+7

C'est l'inverse, ISO permet d'omettre 'T' mais RFC 3339 le rend obligatoire http://tools.ietf.org/html/rfc3339#page -12 –

+0

ISO 8601 inclut également des extensions pas si simples comme les intervalles et les points temporels périodiques, alors que la RFC 3339 ne traite que des horodatages. Les données suivantes (tirées de la spécification WMS) sont ISO légales mais pas RFC: 'Données quotidiennes prises à midi depuis le 15 avril 1995 (intervalle périodique): 1995-04-22T12: 00Z/2000-06-21T12: 00Z/P1D' – geira

+11

Désolé Java Guy, mais ce n'est pas tout à fait correct. L'annexe à laquelle vous faites référence est purement informative 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 se référant à la mention antérieure de lisibilité qui fait l'objet de la section 5.2. Pour citer: "Les applications utilisant cette syntaxe peuvent choisir, par souci de lisibilité, de spécifier une date complète et une heure complète séparées par (disons) un caractère espace." –

2

Vous ne devriez pas avoir à vous soucier autant. RFC 3339, selon lui-même, est un ensemble de normes dérivées de la norme ISO 8601. Il y a cependant quelques différences mineures, et elles sont toutes décrites dans RFC 3339. Je pourrais les parcourir toutes ici, mais vous feriez probablement mieux en train de lire le document pour vous-même dans le cas où vous êtes inquiet:

http://www.ietf.org/rfc/rfc3339.txt

13

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