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

问题描述 投票:0回答:3

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

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

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

date standards datetime-format iso
3个回答
54
投票

必填项除非“信息交换伙伴”同意省略

引用早期版本的 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,则早期版本的标准允许,但是:

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

显然不是(尽管它比简单省略 T 的版本更具可读性)。

就个人而言,如果需要符合 ISO 8601,我会包含 T,如果不是,那么我会使用空格(如果要成为文件名的一部分,则使用连字符)。 另请参阅 Charles Burns 的回答中提到的RFC 3339第 5.6 节。


24
投票

正如 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.

0
投票

ISO 8601 日期和时间格式旨在供人类和机器可读。在结构化查询语言 (SQL)(用于所有计算机数据库的标准化编程语言)中,SQL 中的 ISO 8601 日期和时间格式为“YYYY-MM-DD HH:MM:SS”,前面始终没有“T”时间。

© www.soinside.com 2019 - 2024. All rights reserved.