web-dev-qa-db-ja.com

ISO 8601の日付では、T文字は必須ですか?

次の日付がISO8601に準拠しているかどうか疑問に思います:

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

(確かに、2012-03-02T14:57:05.456 + 0500は準拠していますが、人間が読める形式ではありません!)IOW、日付と時刻の間のTは必須ですか?

40
SCO

「情報交換のパートナー」がそれを省略することに同意しない限り、それは必要です。

ISO 8601標準 、セクション4.3.2の引用:

文字[T]は、これらの式の時刻コンポーネントの表現の開始を示す時間指定子として使用されます。 [...]

注情報交換におけるパートナーの相互合意により、この国際規格で定義されている他の日付と時刻の表現を混同するリスクがないアプリケーションでは、文字[T]を省略できます。

省略することはかなり一般的ですが、表現が機械可読であることが意図されており、省略できるという明確な合意がない場合は、そのままにしておくことをお勧めします。

[〜#〜] update [〜#〜]: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 セクション5.6、 Charles Burnsの回答 も参照してください。

32
Keith Thompson

その日付は、Keith Thompsonが示したようにISO-8601に準拠していませんが、ISO8601のプロファイルであるRFC3339に準拠しています。 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.
14
Charles Burns