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

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

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

5 ответов

Единственное представление, которое я видел в использовании (хотя, по общему признанию, мой опыт ограничен DOJO), это ISO 8601, который работает хорошо и представляет практически все, что вы могли бы подумать.

Например, вы можете посетить ссылку выше.

Плюсы:

  • Представляет практически все, что вы могли бы в него бросить, включая временные рамки. (т.е. 3 дня, 2 часа)

Минусы:

  • Хм... я не знаю на самом деле. Кроме того, возможно, потребуется немного привыкнуть? Это, конечно, достаточно просто для анализа, если нет встроенных функций для его анализа.

ISO 8601 кажется естественным выбором, но если вы хотите проанализировать его с помощью JavaScript, работающего в браузере, вам нужно будет использовать библиотеку, чтобы браузер поддерживал части JavaScript Date Объект, который может анализировать даты ISO 8601, является несовместимым даже в относительно новых браузерах. Другая проблема, связанная с ISO 8601, заключается в том, что это большой, богатый стандарт, и библиотеки даты / времени поддерживают только его часть, поэтому вам придется выбрать подмножество ISO 8601, которое будет поддерживаться используемыми вами библиотеками.

Вместо этого я представляю время как число миллисекунд с 1970-01-01T00: 00Z. Это понимается конструктором для Date Объект в гораздо более старых браузерах, по крайней мере, возвращаясь к IE7 (который является самым старым из протестированных мной).

Не существует заданного литерала, поэтому используйте то, что проще для вас. Для большинства людей это либо строка вывода UTC, либо длинное целое число UTC-центрированного временного кода.

Прочитайте это для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/bb299886.aspx

Я рекомендую использовать формат RFC 3339, который прост и понятен и понятен растущему числу языков, библиотек и инструментов.

К сожалению, RFC 3339, время эпохи Unix и миллисекунды JavaScript все еще не совсем точны, поскольку ни на одну из них не приходится високосных секунд! В какой-то момент нам всем снова придется пересматривать временные представления. Может быть, в следующий раз мы можем покончить с этим.

Извините за комментарий к такому старому вопросу, но за прошедшие годы появилось больше решений.

Представление информации о дате и / или времени в JSON является частным случаем более общей проблемы представления сложных типов и сложных структур данных в JSON. Отчасти сложность проблемы заключается в том, что если вы представляете сложные типы, такие как метки времени, как объекты JSON, то вам необходимо иметь способ выражения ассоциативных массивов и объектов, которые выглядят как ваше представление объекта JSON метки времени, как некоторые другие размеченный объект.

У буферов протокола Google есть отображение JSON, которое имеет понятие типа метки времени с определенной семантикой.

BSON MongoDB имеет расширенный JSON, который говорит { "$date": "2017-05-17T23:09:14.000000Z" },

Оба могут также выразить более сложные структуры в дополнение к datetime.

Другие вопросы по тегам