Texte JSON (RFC 4627) a une représentation non ambiguë d'objets, tableaux, chaînes, nombres, valeurs booléennes (littéralement true
ou false
) et null
. Cependant, il n'a rien de défini pour représenter des informations de temps comme la date et l'heure du jour, ce qui est très commun dans les applications. Quelles sont les méthodes actuelles utilisées pour représenter l'heure dans JSON compte tenu des contraintes et de la grammaire énoncées dans RFC 4627? Note aux répondants: Le but de cette question est de documenter les diverses méthodes connues pour être en circulation avec des exemples et des avantages et inconvénients relatifs (idéalement de l'expérience sur le terrain).Comment représenter les informations de date et/ou d'heure dans JSON?
Répondre
Il n'y a pas de littéral, alors utilisez ce qui est le plus simple pour vous. Pour la plupart des gens, c'est une chaîne de la sortie UTC ou un entier long du code temporel centré UTC.
Lire ceci pour un peu plus de fond: http://msdn.microsoft.com/en-us/library/bb299886.aspx
La seule représentation que je l'ai vu en cours d'utilisation (cependant, il est vrai, mon expérience est limitée à DOJO) est ISO 8601, qui fonctionne bien, et représente à peu près tout vous pourriez penser à.
Par exemple, vous pouvez visiter le lien ci-dessus.
Plus:
- Représentent à peu près tout ce que vous pourriez jeter, y compris plages temporelles. (Soit 3 jours, 2 heures.)
Moins:
- Umm ... Je ne sais pas vraiment. A part peut-être que ça pourrait prendre un peu de temps pour s'y habituer? Il est certainement assez facile à analyser, s'il n'y a pas de fonctions intégrées pour l'analyser.
ISO 8601 semble comme un choix naturel, mais si vous souhaitez analyser avec l'exécution de JavaScript dans un navigateur, vous aurez besoin d'utiliser une bibliothèque, pour le navigateur prend en charge pour les parties du JavaScript Date
objet qui peut analyser les dates ISO 8601 est incohérent, même dans les navigateurs relativement nouveaux. Un autre problème avec ISO 8601 est qu'il s'agit d'une norme riche et volumineuse, et les bibliothèques de date/heure n'en supportent qu'une partie. Vous devrez donc choisir un sous-ensemble d'ISO 8601 à utiliser avec les bibliothèques que vous utilisez. Au lieu de cela, je représente des fois que le nombre de millisecondes depuis 1970-01-01T00: 00Z. Ceci est compris par le constructeur pour l'objet Date
dans des navigateurs beaucoup plus anciens, au moins en remontant à IE7 (qui est le plus ancien que j'ai testé).
Je recommande d'utiliser le format RFC 3339, qui est agréable et simple, et compris par un nombre croissant de langages, bibliothèques et outils.
Malheureusement, la RFC 3339, l'heure Unix et la milliseconde JavaScript ne sont pas encore tout à fait exactes, puisqu'aucun d'entre eux ne compte pour les secondes intercalaires! À un moment donné, nous devrons tous revoir les représentations temporelles. Peut-être que la prochaine fois nous en aurons fini avec ça.
Désolé de commenter une question aussi ancienne, mais dans les années qui ont suivi, plus de solutions ont été trouvées.
La représentation d'informations de date et/ou d'heure dans JSON est un cas particulier du problème plus général de la représentation de types complexes et de structures de données complexes dans JSON. Une partie de ce qui complique le problème est que si vous représentez des types complexes comme les horodatages en tant qu'objets JSON, vous devez avoir une manière d'expression des tableaux associatifs et des objets, qui ressemblent à votre représentation JSON d'un horodatage, comme d'autres objet balisé.
Les protocol buffers de Google ont un JSON mapping qui a la notion d'un type d'horodatage, avec une sémantique définie.
Le BSON de MongoDB a un Extended JSON qui indique { "$date": "2017-05-17T23:09:14.000000Z" }
.
Les deux peuvent également exprimer des structures plus complexes en plus de datetime.