249 format datetime web-standards
ISO 8601和RFC 3339似乎是网络常见的两种格式.我应该使用一个吗?一个只是一个扩展吗?我真的需要关心那么糟糕吗?
Con*_*oyP 210
一个只是一个扩展吗?
差不多,是的 - RFC 3339被列为ISO 8601的配置文件.最值得注意的是RFC 3339需要完整的表示的日期和时间(只有小数秒是可选的).RFC也有一些细微的差别.例如,不允许截断只有两位数的年份表示 - RFC 3339需要4位数年份,RFC只允许将句点字符用作小数秒的小数点.RFC还允许将"T"替换为空格(或其他字符),而标准仅允许省略(并且仅当使用该表示的所有各方之间达成一致时).
我不会太担心两者之间的差异,但是如果你的用例遇到它们的可能性很大,那么值得你一瞥:
cla*_*lay 22
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 天。RFC 3339 不允许这样做。
对于您的问题:
一个只是一个扩展?
否。如上所示,每个标准都支持其他标准不支持的语法变体。所以一种语法不是另一种语法的超集或扩展。
我应该使用一个吗?
当然这取决于你的场景。一个安全的一般策略是生成两个标准都有效的日期时间字符串。
另一个好的通用策略是使用现有的标准库来解析/格式化日期时间字符串,除非您正在处理真正的自定义场景,否则不要编写自定义实现。
我真的需要那么在意吗?
好吧,这取决于你。大多数处理日期时间字符串的常规开发人员应该有较高的理解,但不需要深入研究细节。