2008-09-18 23 views
19

texto JSON (RFC 4627) tiene representación no emblemática de objetos, matrices, cadenas, números, valores booleanos (literalmente true o false) y null. Sin embargo, no tiene nada definido para representar la información del tiempo, como la fecha y la hora del día, que es muy común en las aplicaciones. ¿Cuáles son los métodos actuales en uso para representar el tiempo en JSON dadas las restricciones y la gramática establecidas en RFC 4627?¿Cómo se representa la información de fecha y hora en JSON?

Nota para los encuestados: El objetivo de esta pregunta es documentar los diversos métodos conocidos en circulación junto con ejemplos y ventajas y desventajas relativas (idealmente a partir de la experiencia de campo).

Respuesta

2

No hay un conjunto literal, así que use lo que sea más fácil para usted. Para la mayoría de las personas, es una cadena de salida UTC o un entero largo del código de tiempo centrado en UTC.

Leer esto por un poco más de fondo: http://msdn.microsoft.com/en-us/library/bb299886.aspx

13

El único de su tipo que he visto en uso (aunque, ciertamente, mi experiencia se limita a DOJO) es ISO 8601, que funciona muy bien, y representa casi cualquier cosa posiblemente podrías pensar en

Por ejemplos, puede visitar el enlace de arriba.

Pros:

  • Representa prácticamente todo lo que pueda lanzar en él, incluyendo lapsos. (Es decir, 3 días, 2 horas.)

Contras:

  • Umm ... no sé en realidad. ¿Aparte de quizás podría tomar un poco de tiempo acostumbrarse? Es ciertamente bastante fácil de analizar, si no hay funciones integradas para analizarlo ya.
5

ISO 8601 parece una elección natural, pero si desea analizar con JavaScript que se ejecuta en un navegador, tendrá que utilizar una biblioteca, para el navegador compatible para las partes del JavaScript Date objeto que puede analizar las fechas ISO 8601 es inconsistente, incluso en navegadores relativamente nuevos. Otro problema con ISO 8601 es que es un estándar grande y rico, y las bibliotecas de fecha/hora admiten solo una parte, por lo que tendrá que elegir un subconjunto de ISO 8601 para usar que sea compatible con las bibliotecas que utiliza.

lugar de eso, representan veces como el número de milisegundos desde 1970-01-01T00: 00Z. Esto es entendido por el constructor para el objeto Date en navegadores mucho más antiguos, al menos volviendo a IE7 (que es el más antiguo que he probado).

0

Recomiendo usar el formato RFC 3339, que es agradable y simple, y se entiende por un número creciente de idiomas, bibliotecas y herramientas.

Desafortunadamente, el RFC 3339, el tiempo de época de Unix y el tiempo de milisegundos de JavaScript, todavía no son del todo precisos, ¡ya que ninguno de ellos representa segundos intercalares! En algún momento todos vamos a tener que volver a ver representaciones de tiempo una vez más. Tal vez la próxima vez que terminemos con eso.

0

Perdón por comentar una pregunta tan antigua, pero en los últimos años han aparecido más soluciones.

La representación de la información de fecha y hora en JSON es un caso especial del problema más general de representación de tipos complejos y estructuras de datos complejas en JSON. Parte de lo que hace que el problema sea complicado es que si representa tipos complejos como marcas de tiempo como objetos JSON, entonces necesita tener una forma de arrays asociativos de expresión y objetos, que se parecen a su representación de objeto JSON de una marca de tiempo, como alguna otra objeto marcado.

protocol buffers de Google tiene un JSON mapping que tiene la noción de un tipo de marca de tiempo, con semántica definida.

MongoDB's BSON tiene Extended JSON que dice { "$date": "2017-05-17T23:09:14.000000Z" }.

Ambos también pueden expresar estructuras mucho más complejas además de datetime.

Cuestiones relacionadas