Как представить информацию о дате и / или времени в формате JSON? - PullRequest
19 голосов
/ 18 сентября 2008

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

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

Ответы [ 5 ]

13 голосов
/ 18 сентября 2008

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

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

Плюсы:

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

Минусы:

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

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

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

2 голосов
/ 18 сентября 2008

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

Прочитайте это, чтобы узнать больше: http://msdn.microsoft.com/en-us/library/bb299886.aspx

0 голосов
/ 19 мая 2017

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

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

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

MongoDB BSON имеет Extended JSON , в котором указано { "$date": "2017-05-17T23:09:14.000000Z" }.

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

0 голосов
/ 24 декабря 2014

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

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

...