Подтвердить что ты не робот

Как представить дату и/или информацию о времени в JSON?

Текст JSON (RFC 4627) имеет однозначное представление объектов, массивов, строк, чисел, булевых значений (буквально true или false) и null. Однако он не имеет ничего определенного для представления информации о времени, такой как дата и время суток, что очень часто встречается в приложениях. Какие текущие методы используются для представления времени в JSON с учетом ограничений и грамматики, изложенных в RFC 4627?

Примечание для респондентов. Цель этого вопроса - документировать различные методы, которые, как известно, находятся в обращении, а также примеры и относительные плюсы и минусы (в идеале от опыта на местах).

4b9b3361

Ответ 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.