Яка різниця між форматами дат ISO 8601 та RFC 3339?


280

ISO 8601 та RFC 3339, здається, є двома форматами, які є загальними в Інтернеті. Чи варто використовувати одне над іншим? Це одне лише розширення? Чи мені справді потрібно так добре піклуватися?


42
Я змінив посилання на RFC з ietf.org/rfc/rfc3339.txt на версію HTML за адресою tools.ietf.org/html/rfc3339 . Під час посилання на RFC завжди слід посилатися на версії HTML на веб- сайті tools.ietf.org/html . Вони не тільки легше орієнтуватися завдяки посиланням на розділи, але, що важливо, вони перелічують вгорі будь-які RFC, які оновлювали або застаріли RFC, який ви читаєте. Люди мимоволі цитують застарілі RFC постійно на Stack Overflow, і я продовжуватиму повторювати цю пораду, поки ця проблема не зникне. (Щоб уникнути сумнівів, ця RFC не застаріла.)
Mark Amery

Відповіді:


238

Це одне лише розширення?

Досить, так - RFC 3339 вказаний як профіль ISO 8601. Найбільше RFC 3339 визначає повне подання дати та часу (не потрібні лише дробові секунди). RFC також має деякі невеликі, тонкі відмінності. Наприклад, усічені зображення років, що мають лише дві цифри, не допускаються - RFC 3339 вимагає 4-значних років, а RFC дозволяє використовувати лише символ періоду в якості десяткової точки для дробових секунд. RFC також дозволяє замінити "T" пробілом (або іншим символом), тоді як стандарт дозволяє лише його опустити (і лише тоді, коли між сторонами, що використовують представництво, є згода).

Я б не переймався надто різницями між двома, але, якщо випадковість стосується випадків їх використання, варто було б поглянути на:


11
Інакше, ISO дозволяє опустити 'T', але RFC 3339 мандатує
Java Guy

21
Вибачте Java Гай, але це не зовсім правильно. Додаток, на який ви посилаєтесь, є лише інформаційним, а обмеження - для спрощення граматики. У примітці в кінці розділу 5.6 чітко зазначено, що простір може бути використаний заради читабельності, посилаючись на попередню згадку про читанність, яка є предметом розділу 5.2. цитуйте: "Програми, що використовують цей синтаксис, можуть з метою читабельності вибрати, щоб вказати повну дату та повний робочий день, розділений (скажімо) символом пробілу."
Грег А. Вудс

8
@JavaGuy Додаток, до якого ви посилаєтесь, навіть не говорить про синтаксис RFC 3339 - він має назву ISO 8601 Collected ABNF і є спробою формально описати граматику ISO 8601 за допомогою ABNF . Ніщо, про що йдеться, не повинно сприйматися як доказ про синтаксис дату RFC 3339.
Марк Амері

3
FWIW: Це обговорювалося у списку основних елементів
Фредерік Норд,

9
Я автор, що Джастін (попередній коментар) зв’язався (хоча не відповідальний за більшість важких підйомів там). Я підтверджую його коментар. Взагалі, я хотів би запропонувати специфікації документи , такі як RFC3339 вказати , а не вимагати - це контекст використання , який визначає , що потрібно . Поки зрозуміло, що призначено, то посилання на конкретне виробництво синтаксису є прекрасним. (Це насправді не відрізняється від того, що робить сам RFC3339, роблячи вибіркове посилання на ISO8601.) Див. Також ПРИМІТКА в розділі 5.6 .
Грем Клін

20

RFC 3339 - це здебільшого профіль ISO 8601, але він фактично не відповідає йому при запозиченні специфікації часового поясу "-00: 00" з RFC 2822. Про це йдеться у статті Вікіпедії.


4

Вам не варто було б так сильно піклуватися. RFC 3339, сам по собі, являє собою набір стандартів, похідних від ISO 8601. Однак є досить декілька хвилин, і всі вони окреслені в RFC 3339. Я міг би їх переглядати все тут, але ви, мабуть, зробите краще просто читайте документ для себе, якщо ви переживаєте:

http://tools.ietf.org/html/rfc3339

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.