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天。RFC 3339不允许这样做。
回答您的问题:
它们只是一个扩展吗?
不是。如上所示,每个标准都支持另一个标准不支持的语法变化。因此,一个语法不是另一个语法的超集或扩展。
我应该使用哪一个?
当然,这取决于您的情况。一个安全的通用策略是生成符合两个标准的日期时间字符串。
另一个好的通用策略是使用现有的标准库来解析/格式化日期时间字符串,而不是编写自定义实现,除非您正在处理真正的定制场景。
我真的需要关注这个问题吗?
这取决于你。大多数处理日期时间字符串的普通开发人员应该具有较高水平的理解,但不需要深入了解细节。
RFC 3339基本上是ISO 8601的一个配置文件,但它从RFC 2822借用了"-00:00"时区规范,并与之不一致。这在维基百科文章中有描述。
似乎很难和/或昂贵地获得访问ISO规范的权限。这就是为什么我们经常看到链接到维基百科页面。
光是出于这个原因,我更喜欢RFC3339:你可以直接查阅主要来源。
你不必太在意。RFC 3339是一组从ISO 8601衍生出来的标准。虽然存在一些微小的差异,但它们都在RFC 3339中有详细说明。我可以在这里逐一解释,但如果你担心的话,最好自己阅读文档: