Was ist der Unterschied zwischen den Datumsformaten ISO 8601 und RFC 3339?

279

ISO 8601 und RFC 3339 scheinen zwei im Web übliche Formate zu sein. Soll ich eins über das andere verwenden? Ist man nur eine Erweiterung? Muss ich mich wirklich so sehr darum kümmern?

Mark Amery
quelle
42
Ich habe den Link zum RFC von ietf.org/rfc/rfc3339.txt in die HTML-Version unter tools.ietf.org/html/rfc3339 geändert . Wenn Sie auf RFCs verlinken, sollten Sie immer auf die HTML-Versionen unter tools.ietf.org/html verlinken . Dank der Abschnittsverknüpfungen sind sie nicht nur einfacher zu navigieren, sondern sie führen vor allem alle RFCs auf, die den von Ihnen gelesenen RFC aktualisiert oder veraltet haben. Bei Stack Overflow zitieren die Leute unabsichtlich veraltete RFCs, und ich werde diesen Rat wiederholen, bis dieses Problem behoben ist. (Um Zweifel zu vermeiden, ist dieser RFC nicht veraltet.)
Mark Amery

Antworten:

237

Ist man nur eine Erweiterung?

Ziemlich genau, ja - RFC 3339 ist als Profil von ISO 8601 aufgeführt. Insbesondere gibt RFC 3339 eine vollständige Darstellung von Datum und Uhrzeit an (nur Sekundenbruchteile sind optional). Der RFC weist auch einige kleine, subtile Unterschiede auf. Beispielsweise sind abgeschnittene Darstellungen von Jahren mit nur zwei Ziffern nicht zulässig. Für RFC 3339 sind vierstellige Jahre erforderlich, und für RFC kann nur ein Punktzeichen als Dezimalpunkt für Sekundenbruchteile verwendet werden. Der RFC erlaubt auch, dass das "T" durch ein Leerzeichen (oder ein anderes Zeichen) ersetzt wird, während der Standard nur zulässt, dass es weggelassen wird (und nur, wenn zwischen allen Parteien, die die Darstellung verwenden, Übereinstimmung besteht).

Ich würde mir nicht allzu viele Sorgen um die Unterschiede zwischen den beiden machen, aber wenn Ihr Anwendungsfall nicht auf sie trifft, lohnt es sich, einen Blick auf Folgendes zu werfen:

ConroyP
quelle
11
Es ist umgekehrt, ISO erlaubt es, 'T' wegzulassen, aber RFC 3339 schreibt
Java Guy
21
Sorry Java Guy, aber das ist nicht ganz richtig. Der Anhang, auf den Sie sich beziehen, dient nur zur Information und die Einschränkung dient der Vereinfachung der Grammatik. Der Hinweis am Ende von Abschnitt 5.6 besagt eindeutig, dass ein Leerzeichen zum Zwecke der Lesbarkeit verwendet werden kann, und verweist auf die frühere Erwähnung der Lesbarkeit, die Gegenstand von Abschnitt 5.2 ist. um zu zitieren: "Anwendungen, die diese Syntax verwenden, können aus Gründen der Lesbarkeit wählen, ein Volldatum und eine Vollzeit anzugeben, die durch (beispielsweise) ein Leerzeichen getrennt sind."
Greg A. Woods
8
@JavaGuy Der Anhang, auf den Sie verlinkt haben, spricht nicht einmal über die RFC 3339-Syntax - er trägt den Titel ISO 8601 Collected ABNF und ist ein Versuch, die Grammatik von ISO 8601 mithilfe von ABNF formal zu beschreiben . Nichts, was darin steht, sollte als Beweis für die RFC 3339-Datetime-Syntax angesehen werden.
Mark Amery
3
FWIW: Es wurde auf der Coreutils-Liste diskutiert: lists.gnu.org/archive/html/bug-coreutils/2006-05/msg00019.html
Frederick Nord
9
Ich bin der Autor, den Justin (vorheriger Kommentar) kontaktiert hat (obwohl er nicht für die meisten schweren Arbeiten verantwortlich ist). Ich bestätige seinen Kommentar. Im Allgemeinen würde ich vorschlagen, dass Spezifikationsdokumente wie RFC3339 eher spezifizieren als erfordern - es ist der Verwendungskontext, der bestimmt, was erforderlich ist . Solange klar ist, was beabsichtigt ist, ist es in Ordnung, auf eine bestimmte Syntaxproduktion zu verweisen. (Dies unterscheidet sich nicht wirklich von dem, was RFC3339 selbst bei der selektiven Bezugnahme auf ISO8601 tut.) Siehe auch den HINWEIS in Abschnitt 5.6 .
Graham Klyne
20

RFC 3339 ist größtenteils ein Profil von ISO 8601, widerspricht jedoch tatsächlich der Ausleihe der Zeitzonenspezifikation "-00: 00" von RFC 2822. Dies wird im Wikipedia-Artikel beschrieben.

Zefram
quelle
4

Sie sollten sich nicht so sehr darum kümmern müssen. RFC 3339 ist für sich genommen eine Reihe von Standards, die von ISO 8601 abgeleitet sind. Es gibt jedoch einige winzige Unterschiede, die alle in RFC 3339 beschrieben sind. Ich könnte sie alle hier durchgehen, aber Sie würden es wahrscheinlich besser machen Lesen Sie das Dokument einfach selbst, falls Sie sich Sorgen machen:

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

David Morton
quelle