ISO 8601和RFC 3339日期格式之间有什么区别?


280

ISO 8601RFC 3339似乎是Web上常见的两种格式。我应该在另一个上使用吗?是一个扩展吗?我真的需要照顾那个坏人吗?


42
我已将RFC的链接从ietf.org/rfc/rfc3339.txt更改为HTML版本,位于tools.ietf.org/html/rfc3339。链接到RFC时,应始终链接到tools.ietf.org/html上的HTML版本。由于有了部分链接,它们不仅更易于浏览,而且重要的是,它们在顶部列出了所有已更新或废弃的RFC。人们无意间总是在Stack Overflow上引用过时的RFC,我将继续重复此建议,直到问题解决为止。(为避免疑问, RFC并非过时。)
Mark Amery

Answers:


238

是一个扩展吗?

是的,几乎是的-RFC 3339被列为ISO 8601的配置文件。最著名的是RFC 3339指定了日期和时间的完整表示(仅小数秒是可选的)。RFC也有一些细微的细微差别。例如,不允许仅用两位数字表示的年份的截断表示法-RFC 3339需要4位数字的年份,并且RFC仅允许将句点字符用作小数秒的小数点。RFC还允许将“ T”替换为空格(或其他字符),而标准仅允许将其省略(并且仅当使用该表示的各方之间达成协议时)。

我不会太担心这两者之间的差异,但是如果您的用例遇到了偶然的情况,那么值得一看:


11
这是另一种方式,ISO允许省略“ T”,但是RFC 3339强制使用它 tools.ietf.org/html/rfc3339#page-12
Java Guy

21
抱歉,Java Guy,但这不是很正确。您所引用的附录仅供参考,其限制是为了使语法更简单。在第5.6节末尾的注释中明确指出,为了便于阅读,可以使用空格,请参阅前面提到的第5.2节的可读性。引用:“出于可读性考虑,使用此语法的应用程序可以选择指定一个完整的日期和一个全职时间,并用(例如)空格字符分隔。”
格雷格·伍兹

8
@JavaGuy您链接到的附录甚至没有在谈论RFC 3339语法-标题为ISO 8601 Collected ABNF,它是尝试使用ABNF正式描述ISO 8601语法的尝试。它说的什么都不应作为有关RFC 3339日期时间语法的证据。
Mark Amery 2015年

3
FWIW:已经在coreutils列表上进行了讨论:lists.gnu.org/archive/html/bug-coreutils/2006-05/msg00019.html
Frederick Nord

9
我是Justin(先前的评论)联系的作者(尽管不负责那里的大部分繁重工作)。我确认他的评论。通常,我建议像RFC3339这样的规范文档指定而不是要求 -由使用的上下文确定要求的内容。只要明确了目标,就可以引用特定的语法。(这与RFC3339本身在选择性引用ISO8601方面并没有什么不同。)另请参见5.6节中的NOTE 。
格雷厄姆·克莱恩

20

RFC 3339主要是ISO 8601的配置文件,但实际上它与RFC 2822的“ -00:00”时区规范不一致。这在Wikipedia文章中进行了描述。


4

您不必太在乎。就其本身而言,RFC 3339是一组源自ISO 8601的标准。尽管有一些细微的差异,但它们均在RFC 3339中概述。我可以在此处进行全面介绍,但您可能会做得更好只是在担心时自己阅读文档:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.