Я новичок в JSON и, рассматривая спецификацию JSON, я заметил, что нет типа данных для дат и времени. Я провел некоторое исследование и нашел несколько предложений, один из которых использовал отметку времени UNIX. Это самый простой подход? Будут ли я сталкиваться с проблемами на линии?
Каков наилучший способ хранения даты/времени в JSON?
Ответ 1
Я рекомендую использовать даты ISO 8601. Особенно этот формат
2014-03-12T13:37:27+00:00
переносится на многих языках программирования.
Edit:
JSON знает только эти типы:
string
number
object
array
true
false
null
Даты и даты лучше всего сохраняются в виде строк в широко используемом формате.
Ответ 2
Конечно, вы должны сохранить String в JSON. Но скажем, вы хотите отфильтровать даты. Вы все равно можете сохранить "число" в виде строки типа "125" (двоичная кодированная десятичная цифра), и она будет полезна, если вы ее преобразуете обратно в 125. Тем не менее, Если вы хотите настроить свой номер даты для фильтрации, например: Используйте длинный тип и выполняйте операции побитовые. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
- Зарезервируйте 12 бит для YYYY до 4096-1.
- зарезервировать 4 бит для MM, потому что (0-11) достаточно.
- Зарезервируйте 5 бит для DD, потому что день месяца (1-31).
Вы можете продолжать резервирование бит в течение нескольких часов, минут до 64 бит. В этом случае DD/MM/YYYY - 21 бит. Используя этот подход, вы соглашаетесь с @Clay Ferguson, и вы можете фильтровать KeySet на карте с точки зрения "<". и " > " по годам, месяцам, дням очень легко и, вероятно, очень быстро.
Ответ 3
Если вам больше нужна эффективность памяти (и дискового пространства), чем человеческая читаемость необработанного JSON, лучше всего хранить ее как целое число (то есть миллисекундное значение даты). Кроме того, если вы действительно хотели оптимизировать для экономии пространства, вы можете кодировать это целое число на Base64, а затем позволить JSON удерживать строку base64 в виде строки JSON. Я даже не упоминаю hex, потому что, если вы кодируете что-то не десятичное, вы также можете перейти к base64. Другими словами, нет никаких преимуществ для кодирования шестнадцатеричного кода по base64, поэтому просто перейдите к base64.