2008-09-18 1 views
19

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

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

ответ

2

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

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

13

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

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

Плюсы:

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

Против:

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

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

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

0

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

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

0

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

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

У protocol buffers пользователей Google есть JSON mapping, который имеет понятие типа метки, с определенной семантикой.

У BSON у MongoDB есть Extended JSON, который говорит { "$date": "2017-05-17T23:09:14.000000Z" }.

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