答案 0 :(得分:188)
只是一个扩展吗?
差不多,是的 - RFC 3339被列为ISO 8601的配置文件。最值得注意的是RFC 3339指定了日期和时间的完整表示(只有小数秒是可选的)。 RFC也有一些细微的差别。例如,不允许截断只有两位数的年份表示 - RFC 3339需要4位数年份,而RFC只允许将句点字符用作小数秒的小数点。 RFC还允许将“T”替换为空格(或其他字符),而标准仅允许省略(并且仅当使用该表示的所有各方之间达成协议时)。
我不会过分担心两者之间的差异,但是如果你的用例遇到了他们的机会,那么值得你瞥一眼:
答案 1 :(得分:17)
RFC 3339主要是ISO 8601的配置文件,但在借用RFC 2822的“-00:00”时区规范时实际上与它不一致。维基百科文章对此进行了描述。
答案 2 :(得分:2)
你不应该那么在意。 RFC 3339,根据自身,是一套源自ISO 8601的标准。虽然有很多细微差别,但它们都在RFC 3339中列出。我可以在这里完成它们,但你可能会做得更好在您担心的情况下,只需为自己阅读文档:
答案 3 :(得分:1)
ISO 8601和RFC 3339之间有很多区别。下面是一些示例,供您参考:
2020-12-09T16:09:53+00:00
是同时符合这两个标准的日期时间值。
2020-12-09 16:09:53+00:00
使用空格分隔日期和时间。 RFC 3339允许这样做,但ISO 8601不允许。
2020-12-09T16:09:53-00:00
在时间偏移中带有负号。 RFC 3339允许这样做,但ISO 8601不允许。
20201209T160953Z
省略了连字符。 ISO 8601允许这样做,但RFC 3339不允许。
ISO 8601允许使用诸如2020-344
之类的有序日期,它代表2020年的第344天。RFC3339不允许这样做。
对于您的问题:
只是扩展吗?
不。如上所示,每个标准都支持另一个标准不支持的语法变体。因此,一种语法不是另一种语法的超集或扩展。
我应该在另一个上使用吗?
这当然取决于您的情况。一种安全的通用策略是生成两个标准均有效的日期时间字符串。
另一种好的通用策略是使用现有的标准库来解析/格式化日期时间字符串,并且除非要解决真正的自定义方案,否则不编写自定义实现。
我真的需要照顾那个坏人吗?
嗯,这取决于您。大多数处理日期时间字符串的常规开发人员都应该具有较高的理解水平,但无需深入研究细节。
答案 4 :(得分:0)
实际访问 ISO 规范似乎很困难和/或成本很高。这就是为什么我们看到许多指向维基百科页面的链接。
仅出于这个原因,我更喜欢 RFC3339:您可以直接访问主要来源。
答案 5 :(得分:-3)
'2018-03T13:24:59.321T'<-有效的ISO 8601
'2018-03T13:24:59.321T'<-无效的ISO 3339
至少有一个差异