作者:mobiledu2402851373 | 2023-08-30 21:50
ISO 8601和RFC 3339似乎是网络常见的两种格式.我应该使用一个吗?一个只是一个扩展吗?我真的需要关心那么糟糕吗?
1> ConroyP..:
一个只是一个扩展吗?
差不多,是的 - RFC 3339被列为ISO 8601的配置文件.最值得注意的是RFC 3339需要完整的表示的日期和时间(只有小数秒是可选的).RFC也有一些细微的差别.例如,不允许截断只有两位数的年份表示 - RFC 3339需要4位数年份,RFC只允许将句点字符用作小数秒的小数点.RFC还允许将"T"替换为空格(或其他字符),而标准仅允许省略(并且仅当使用该表示的所有各方之间达成一致时).
我不会太担心两者之间的差异,但是如果你的用例遇到它们的可能性很大,那么值得你一瞥:
RFC 3339
维基百科上的ISO 8601条目
对不起Java Guy,但这不太正确.您引用的附录仅供参考,限制是为了保持语法更简单.5.6节末尾的注释清楚地表明,为了便于阅读,可以使用一个空格,参考前面提到的可读性,这是第5.2节的主题.引用:"为了便于阅读,使用这种语法的应用程序可以选择指定由(例如)空格字符分隔的完整日期和全时间."
另一方面,ISO允许省略'T'但RFC 3339要求它http://tools.ietf.org/html/rfc3339#page-12
@JavaGuy您链接到的附录甚至没有谈论RFC 3339语法 - 它标题为**ISO 8601 Collected ABNF**,并试图使用[ABNF](https)正式描述*ISO 8601*的语法://tools.ietf.org/html/rfc5234).它所说的任何内容都不应被视为RFC 3339 datetime语法的证据.
我是Justin(先前的评论)联系的作者(尽管不负责那里的大部分繁重工作)。我确认他的评论。通常,我会建议像RFC3339这样的规范文档,而不是* require *,而不是* require *-这是使用上下文来确定* required *是什么。只要明确了目标,就可以引用特定的语法。(这与RFC3339本身对选择ISO8601的选择性引用并没有什么不同。)另请参见[5.6节](https://tools.ietf.org/html/rfc3339#section-5.6)中的注释。
FWIW:已在coreutils列表中进行了讨论:http://lists.gnu.org/archive/html/bug-coreutils/2006-05/msg00019.html
2> 小智..:
RFC 3339主要是ISO 8601的配置文件,但实际上与借用RFC 2822中的"-00:00"时区规范不一致.这在Wikipedia文章中有所描述.