Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


ISO 8601 con milisegundos y Retrofit

No puedo establecer correctamente el formato de fecha al usar la actualización y tratar de leer una fecha como esta:

2015-08-29T11:22:09.815479Z 

Un convertidor GSON que estoy configurando es como esto:

 GsonConverter gsonConverter = new GsonConverter( new GsonBuilder() .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSz") .create() ); 

¿Alguna pista sobre cuál es el problema?

One Solution collect form web for “ISO 8601 con milisegundos y Retrofit”

La fecha de Java tiene una precisión de milisegundos, así que he estado creando el objeto Gson así:

 Gson gson = new GsonBuilder() .setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") .create(); 

Por supuesto, en un caso como este, los microsegundos se están truncando si usted pone SSS o SSSSSS . También se supone que el último carácter de la cadena convertida es siempre un Z

Para explicar por qué su patrón no funcionó, utilizó z (minúscula z) que, de acuerdo con la documentación, representa una zona horaria general (es decir, Pacific Standard Time; PST; GMT-08:00 ). Además, si tuviera que usar Z ( Z mayúscula), también no funcionaría ya que representa una zona horaria RFC 822 (es decir, -0800 ).

En otro escenario donde, en lugar de Z , tiene un desfase de zona horaria (es decir, -08 , -0800 o -08:00 ), puede utilizar X , XX o XXX para representar una zona horaria ISO 8610 . Pero eso requiere Java 7 u 8 (no creo que Android es compatible con Java 8 en este momento).


Otro método sería escribir su propio Gson Serializer y Deserializer ; Aunque no lo he intentado.

También vale la pena mirar la clase java.sql.Timestamp que también es compatible con Gson y tiene una precisión más fina (nanosegundos) pero también es una opción que no he explorado.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.