Как представить дату и/или информацию о времени в JSON?
Текст JSON (RFC 4627) имеет однозначное представление объектов, массивов, строк, чисел, булевых значений (буквально true
или false
) и null
. Однако он не имеет ничего определенного для представления информации о времени, такой как дата и время суток, что очень часто встречается в приложениях. Какие текущие методы используются для представления времени в JSON с учетом ограничений и грамматики, изложенных в RFC 4627?
Примечание для респондентов. Цель этого вопроса - документировать различные методы, которые, как известно, находятся в обращении, а также примеры и относительные плюсы и минусы (в идеале от опыта на местах).
Ответы
Ответ 1
Единственное представление, которое я видел в использовании (хотя, по общему признанию, мой опыт ограничен DOJO) ISO 8601, который прекрасно работает и представляет практически все, о чем вы могли подумать.
Для примера вы можете перейти по ссылке выше.
Плюсы:
- Представляет практически все, что вы могли бы бросить на него, включая временные промежутки. (т.е. 3 дня, 2 часа).
Минусы:
- Умм... На самом деле я не знаю. Кроме того, может быть, это немного привыкает? Конечно, достаточно легко разобрать, если в нем нет встроенных функций для его анализа.
Ответ 2
ISO 8601 кажется естественным выбором, но если вы хотите проанализировать его с помощью JavaScript, запущенного в браузере, вам нужно будет использовать библиотеку, для поддержки браузера для частей JavaScript Date
объект, который может анализировать даты ISO 8601, является непоследовательным даже в относительно новых браузерах. Еще одна проблема с ISO 8601 заключается в том, что это большой, богатый стандарт, а библиотеки даты и времени поддерживают только его часть, поэтому вам нужно будет выбрать подмножество ISO 8601 для использования, которое поддерживается библиотеками, которые вы используете.
Вместо этого я представляю времена как число миллисекунд с 1970-01-01T00: 00Z. Это понимается конструктором для объекта Date
во многих старых браузерах, по крайней мере, для IE7 (который является самым старым, который я тестировал).
Ответ 3
Нет заданного литерала, поэтому используйте то, что вам просто легче. Для большинства людей это либо строка вывода UTC, либо длинное целое число тайм-кода, ориентированного на UTC.
Прочтите это немного больше фона: http://msdn.microsoft.com/en-us/library/bb299886.aspx
Ответ 4
Я рекомендую использовать RFC 3339, который является приятным и понятным и понятным из-за растущего числа языков, библиотек и инструментов.
К сожалению, RFC 3339, Unix epoch time и JavaScript в миллисекундах, все еще не совсем точны, так как ни один из них не отвечает за прыжковые секунды! В какой-то момент нам все равно придется снова пересмотреть представления времени. Может быть, в следующий раз мы с ним справимся.
Ответ 5
Извините, что прокомментировал такой старый вопрос, но за прошедшие годы появилось больше решений.
Представление информации о дате и/или времени в JSON является частным случаем более общей проблемы представления сложных типов и сложных структур данных в JSON. Отчасти проблема в том, что если вы представляете сложные типы, такие как метки времени как объекты JSON, тогда вам нужно иметь способ выражения ассоциативных массивов и объектов, которые выглядят как ваше представление объекта JSON временной метки, как некоторые другие помеченный объект.
Google протокольные буферы имеют JSON mapping который имеет понятие типа метки, с определенной семантикой.
MongoDB BSON имеет Extended JSON который говорит { "$date": "2017-05-17T23:09:14.000000Z" }
.
Оба могут также выразить более сложные структуры в дополнение к datetime.