在ISO 8601日期,T字符是强制性的吗?

时间:2012-03-02 10:16:50

标签: date standards datetime-format iso

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

2012-03-02 14:57:05.456+0500

(当然,2012-03-02T14:57:05.456 + 0500是合规的,但不是那么多人类可读!) IOW,日期和时间之间的T是强制性的吗?

2 个答案:

答案 0 :(得分:26)

除非"合作伙伴进行信息交换,否则

需要这样做。同意省略它。

引用ISO 8601 standard,第4.3.2节:

  

字符[T]应作为时间指示符来表示   开始在这些中表示时间组件   表达式。 [...]

     

注:经信息交流合作伙伴双方同意,   在没有的情况下,可以省略字符[T]   将日期和时间表示与他人混淆的风险   本国际标准中定义的。

省略它是相当常见的,但如果表示是机器可读的并且您没有明确同意可以省略它,则建议将其保留。

更新:Mark Amery的评论很明确,省略[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'被空格所取代,但标准并没有这样说。

另请参阅RFC 3339中提到的Charles Burns's answer第5.6节。

答案 1 :(得分:13)

该日期与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.