Je ne peux pas définir correctement le format de la date lorsque j'utilise la modification et que je tente de lire une date comme celle-ci:
2015-08-29T11:22:09.815479Z
Un GSON convertisseur que je suis en train de paramétrer est comme ceci:
GsonConverter gsonConverter = new GsonConverter(
new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSz")
.create()
);
Des indices sur quel est le problème?
Java Date a la précision milliseconde, donc j'ai créé l'objet Gson
comme suit:
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
.create();
Bien sûr, dans un cas comme celui-ci, les microsecondes sont tronquées, que vous mettiez SSS
ou SSSSSS
. Il est également supposé que le dernier caractère de la chaîne convertie est toujours un Z
.
Pour expliquer pourquoi votre modèle n'a pas fonctionné, vous avez utilisé z
(minuscule z) qui, selon la documentation, représente un fuseau horaire général (c'est-à-dire Pacific Standard Time; PST; GMT-08:00
). De plus, si vous utilisiez Z
(majuscule Z), cela ne fonctionnerait pas non plus car il représente un fuseau horaire RFC 822 (c'est-à-dire -0800
).
Dans un autre scénario où, au lieu de Z
, vous avez un décalage de fuseau horaire (à savoir -08
, -0800
ou -08:00
), vous pouvez utiliser X
, XX
ou XXX
pour représenter un ISO 8610 fuseau horaire . Mais cela nécessite Java 7 ou 8 (je ne pense pas qu'Android soit compatible avec Java 8 pour le moment).
Une autre méthode consiste à écrire votre propre variable Gson
Serializer and Deserializer ; bien que je n'ai pas essayé.
Cela vaut également la peine de regarder Java.sql.Timestamp class qui est également pris en charge par Gson
et a une précision plus fine (nanosecondes), mais c’est aussi une option que je n’ai pas explorée.