"Правильный" формат даты JSON
Я видел так много разных стандартов для формата даты JSON:
""/Date(1335205592410)/"" .NET JavaScriptSerializer
""/Date(1335205592410-0500)/"" .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z" JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00" ISO 8601
какой из них правильный? Или лучше? Есть ли какой-то стандарт на это?
10 ответов:
JSONне укажите, как должны быть представлены даты, но JavaScript делает.
вы должны используйте формат, испускаемый
Date' stoJSONспособ:
2012-04-23T18:25:43.511Zвот почему:
это человек читаемый, но и лаконичный
все правильно
оно включает частичное секунды, которые могут помочь восстановить хронологию
что соответствует ISO 8601
ISO 8601 хорошо зарекомендовал себя на международном уровне уже более десяти лет
как говорится, каждая когда-либо написанная библиотека дат может понять " миллисекунды с тех пор 1970". Так что для легкой переносимости, ThiefMaster прав.
JSON ничего не знает о датах. Что делает .NET-это нестандартный Хак / расширение.
Я бы использовал формат, который можно легко преобразовать в
Dateобъект в JavaScript, т. е. тот, который может быть передан вnew Date(...). Самый простой и, вероятно, самый портативный формат-это временная метка, содержащая миллисекунды с 1970 года.
нет правильного формата; The спецификация JSON не указывает формат для обмена датами, поэтому существует так много различных способов сделать это.
лучшим форматом, возможно, является дата, представленная в формат ISO 8601 (посмотреть в Википедии); это хорошо известный и широко используемый формат и может быть обработан на разных языках, что делает его очень хорошо подходит для совместимость. Если у вас есть контроль над сгенерированным json, например, вы предоставляете данные другим системам в формате json, выбор 8601 в качестве формата обмена датами является хорошим выбором.
Если у вас нет контроля над сгенерированным json, например, вы являетесь потребителем json из нескольких различных существующих систем, лучший способ обработки этого-иметь функцию утилиты анализа даты для обработки различных ожидаемых форматов.
с RFC 7493 (формат сообщения I-JSON):
I-JSON означает либо Internet JSON, либо Interoperable JSON, в зависимости от того, кого вы спрашиваете.
протоколы часто содержат элементы данных, которые предназначены для хранения временные метки или продолжительность времени. Рекомендуется, чтобы все такие данные элементы должны быть выражены в виде строковых значений в формате ISO 8601, как указано в RFC 3339, С дополнительными ограничениями, которые скорее прописные чем использовать строчные буквы, чтобы часовой пояс не включался по умолчанию, и что дополнительные конечные секунды будут включены даже тогда, когда их значение "00". Также рекомендуется, чтобы все элементы данных содержащ продолжительность времени соответствует к продукции "продолжительности" внутри Приложение а к RFC 3339, с теми же дополнительными ограничениями.
просто для справки я видел этот формат используется:
Date.UTC(2017,2,22)Он работает с JSONP что подтверждается
в Sharepoint 2013, получение данных в JSON нет формата для преобразования даты в формат только даты, потому что в этой дате должно быть в формате ISO
yourDate.substring(0,10)Это может быть полезно для вас
следующий код работал для меня. Этот код будет печатать дату в ДД-ММ-ГГГГ.
DateValue=DateValue.substring(6,8)+"-"+DateValue.substring(4,6)+"-"+DateValue.substring(0,4);другое, вы также можете использовать:
DateValue=DateValue.substring(0,4)+"-"+DateValue.substring(4,6)+"-"+DateValue.substring(6,8);
есть только один правильный ответ на этот и большинство систем ошибаются. Количество миллисекунд с эпохи, он же 64-битное целое число. Часовой пояс-это проблема пользовательского интерфейса и не имеет бизнеса на уровне приложений или уровне БД. Почему ваша БД заботится о том, какой часовой пояс что-то есть, когда вы знаете, что он будет хранить его как 64-битное целое число, а затем выполнять вычисления преобразования.
удалите посторонние биты и просто обрабатывайте даты как числа до пользовательского интерфейса. Вы можете использовать простую арифметику операторы для выполнения запросов и логики.
это работа для меня с parse Server
{ "ContractID": "203-17-DC0101-00003-10011", "Supplier":"Sample Co., Ltd", "Value":12345.80, "Curency":"USD", "StartDate": { "__type": "Date", "iso": "2017-08-22T06:11:00.000Z" } }
Я думаю, что это действительно зависит от случая использования. Во многих случаях было бы более полезно использовать правильную объектную модель (вместо рендеринга даты в строку), например:
{ "person" : { "name" : { "first": "Tom", "middle": "M", ... } "dob" : { "year": 2012, "month": 4, "day": 23, "hour": 18, "minute": 25, "second": 43, "timeZone": "America/New_York" } } }по общему признанию, это более подробно, чем RFC 3339, но:
- это также читается человеком
- он реализует правильную объектную модель (как в ООП, насколько это позволяет JSON)
- он поддерживает часовые пояса (не только смещение UTC на заданную дату и время)
- оно может поддержать более малые блоки как миллисекунды ,наносекунды... или просто доли секунды
- это не требует отдельного шага разбора (для разбора строки даты-времени), JSON-парсер сделает все за вас
- простое создание с любой структурой даты и времени или реализацией на любом языке
- можно легко расширить для поддержки других календарных шкал (иврит, китайский, Исламский ...) и эпох (AD, BC,...)
- это год 10000 безопасно ; -) (RFC 3339 нет)
- поддерживает даты в течение всего дня и плавающее время (Javascript
Date.toJSON()нет)Я не думаю, что правильная сортировка (как отмечено funroll для RFC 3339) - это функция, которая действительно необходима при сериализации даты в JSON. Кроме того, это верно только для даты-времени с одинаковым смещением часового пояса.
Comments