Обязателен ли символ Т в ISO 8601? - PullRequest
33 голосов
/ 02 марта 2012

Мне интересно, соответствует ли следующая дата ISO8601:

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

(наверняка, 2012-03-02T14: 57: 05.456 + 0500 соответствует требованиям, но не настолько хорошо читается человеком!) IOW, T между датой и временем обязательна?

Ответы [ 2 ]

26 голосов
/ 02 марта 2012

Требуется, если «партнеры по обмену информацией» не согласятся на это.

Цитирование стандарта ISO 8601 , раздел 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], а если бы его не было, я бы использовал пробел (или дефис, если он будет частью имени файла). Мое предположение, и это не более того, заключалось в том, что цель состояла в том, чтобы заменить букву «Т» на пробел, но в стандарте этого не говорится.

См. Также RFC 3339 раздел 5.6, упомянутый в ответ Чарльза Бернса .

13 голосов
/ 30 ноября 2015

Эта дата не соответствует 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.
...