Date 在ISO 8601日期中,T字符是必需的吗?

Date 在ISO 8601日期中,T字符是必需的吗?,date,standards,datetime-format,iso,Date,Standards,Datetime Format,Iso,我想知道以下日期是否符合ISO8601标准: 2012-03-02 14:57:05.456+0500 (当然,2012-03-02T14:57:05.456+0500是兼容的,但不是那么容易让人读懂!) 那么,日期和时间之间的T是强制性的吗?除非“信息交换合作伙伴”同意省略它,否则它是必需的 引用第4.3.2节: 字符[T]应用作时间指示器,以指示 开始表示这些文件中的时间组件 表达。[……] 信息交换合作伙伴相互协议的注释, 字符[T]可以在没有 将日期和时间表示与其他表示混淆的风险 在本

我想知道以下日期是否符合ISO8601标准:

2012-03-02 14:57:05.456+0500
(当然,2012-03-02T14:57:05.456+0500是兼容的,但不是那么容易让人读懂!) 那么,日期和时间之间的T是强制性的吗?

除非“信息交换合作伙伴”同意省略它,否则它是必需的

引用第4.3.2节:

字符[T]应用作时间指示器,以指示 开始表示这些文件中的时间组件 表达。[……]

信息交换合作伙伴相互协议的注释, 字符[T]可以在没有 将日期和时间表示与其他表示混淆的风险 在本国际标准中定义

省略它是相当常见的,但是如果表示是机器可读的,并且您没有明确的协议可以省略它,那么将其保留是可取的

更新:马克·艾默里的评论提出了一个很好的观点,即允许省略[T]并不一定意味着允许将其替换为空格。因此:

2012-03-02T14:57:05.456+0500
显然是合规的,这:

2012-03-0214:57:05.456+0500
如果合伙人同意省略[T],则允许,但:

2012-03-02 14:57:05.456+0500
显然不是(尽管它比省略了[T]的版本可读性好得多)

就个人而言,如果需要符合ISO 8601标准,我会包括[T],如果不是,我会使用空格(如果它将成为文件名的一部分,则使用连字符)。我的猜测,仅仅是,它的意图是允许“T”被一个空格代替,但标准没有这样说


另请参见第5.6节。

中提到的,该日期不符合基思·汤普森指出的ISO-8601标准,但符合RFC 3339标准,即ISO 8601标准。 某种程度上。请参见以下文本底部的注释:


RFC3339允许这样做的事实是相当荒谬的;似乎RFC 3339作者的意图是创建一个比ISO 8601严格的标准,同时确保所有RFC 3339日期时间仍然符合ISO 8601的语法。。。但随后他们随机决定以这种微小、毫无意义的方式使RFC3339语法比ISO8601语法更为宽松,从而破坏了这一目标。我不明白;对我来说,这显然是一个愚蠢的决定,我无法理解它是如何做出的。但不管我喜欢与否都是这样,所以这个答案不幸是正确的。我不认为这个注释放松了日期时间的语法,而是指出,如果协议喜欢单独使用完整日期和完整时间,则不需要使用日期时间。例如,协议可以选择将其定义为
timestamp\u header::=“timestamp:”date-time
,而不是像
timestamp\u header::=“timestamp:”full-date”“full-time
。从人类可读性的角度来看,ISO标准是荒谬的。下划线(低破折号)
\uu
T
:2012-03-02\u 14:57:05.456+0500要好得多
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.