我想知道以下日期是否符合ISO8601标准:
2012-03-02 14:57:05.456+0500
(当然,2012-03-02T14:57:05.456+0500是符合标准的,但并不易于人类阅读!) 也就是说,在日期和时间之间必须有一个"T"吗?
2012-03-02 14:57:05.456+0500
(当然,2012-03-02T14:57:05.456+0500是符合标准的,但并不易于人类阅读!) 也就是说,在日期和时间之间必须有一个"T"吗?
除非“信息交换伙伴”同意省略,否则必须使用它。
引用ISO 8601标准的早期版本,第4.3.2节:
在这些表达式中,字符[T]应作为时间指示符号,表示一天中时间组成部分的开始。[...]
注:如果信息交换双方相互同意,在没有与本国际标准定义的其他日期和时间表示形式混淆的风险的应用程序中,可以省略字符[T]。
省略它是相当常见的,但是如果表示意图是机器可读的并且您没有明确的协议可以省略它,则建议保留它。
但根据维基百科:
在ISO 8601:2004中,双方可以协商省略"T"字符,例如"200704051430",但这一规定在ISO 8601-1:2019中被删除。在ISO 8601中不允许使用空格等其他字符分隔日期和时间部分,但在其配置文件RFC 3339中允许使用。更新:Mark Amery的评论指出了一个很好的观点,即允许省略[T]并不一定意味着允许用空格替换它。因此,以下内容是:2012-03-02T14:57:05.456+0500
非常符合要求,而这个:
2012-03-0214:57:05.456+0500
如果合作伙伴同意删除T,那么早期版本的标准允许使用was,但是这样做:
2012-03-02 14:57:05.456+0500
正如Keith Thompson所指出的那样,该日期不符合ISO-8601标准,但它符合RFC 3339,这是ISO 8601的一个配置文件。 有点像。请参见以下来自RFC 3339底部的注释:
date-time = full-date "T" full-time
NOTE: Per [ABNF] and ISO8601, the "T" and "Z" characters in this
syntax may alternatively be lower case "t" or "z" respectively.
This date/time format may be used in some environments or contexts
that distinguish between the upper- and lower-case letters 'A'-'Z'
and 'a'-'z' (e.g. XML). Specifications that use this format in
such environments MAY further limit the date/time syntax so that
the letters 'T' and 'Z' used in the date/time syntax must always
be upper case. Applications that generate this format SHOULD use
upper case letters.
NOTE: ISO 8601 defines date and time separated by "T".
Applications using this syntax may choose, for the sake of
readability, to specify a full-date and full-time separated by
(say) a space character.
timestamp_header ::= "Timestamp:" date-time
定义为 timestamp_header ::= "Timestamp:" full-date " " full-time
。请注意,这里的翻译尽可能保留了原文的意思和结构,同时让其更通俗易懂。 - Adam M. Costello
_
比T
更好:2012-03-02_14:57:05.456+0500 - RodolfoT
**设为强制性。我已经更新了我的答案。 - Keith Thompson