Análogo incorrecto de cadenas de fecha en SimpleDateFormat

Estoy tratando de convertir una fecha de formato de cadena en UTC a un objeto de fecha que está resultando una conversión que está apagado por un par de minutos.

SimpleDateFormat fullDateFormater = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS", Locale.US); fullDateFormater.setTimeZone(TimeZone.getTimeZone("UTC")); 

Antes de analizar la cadena de fecha es – 2014-07-07T18:24:23.788810

Después de analizar la fecha es Tue Jul 08 00:07:31 GMT+05:30 2014

La conversión de fecha correcta es Tue Jul 07 23:54:23 GMT+05:30 2014

Hay una diferencia de unos 12-13 minutos en la conversión. He observado una diferencia en el rango de 10 minutos en la conversión.

Alguna idea de lo que va mal?

SSSSSS está analizando un número de milisegundos – no microsegundos, como usted está esperando.

788810 milisegundos tiene 13 minutos, 8 segundos y 810 milisegundos. Así que su resultado es en realidad 2014-07-07T18: 27: 31.810.

Sí, este es un pedazo realmente estúpido del diseño del API. Sería mucho más sensato que S...S significara "fracciones de segundo" en lugar de "milisegundos" – pero está lejos de lo peor de la API de fecha / hora pre-Java-8 🙁

No creo que haya una manera de analizar los microsegundos con SimpleDateFormat – la precisión de las API de tiempo de Java pre-Java-8 es milisegundos de todos modos – así que creo que sólo necesitará cortar los últimos tres dígitos con substring y analizarlo usando SSS al final de la cadena de formato.

Si estás usando Java 8, te animo fuertemente a abrazar java.time , que estoy seguro que puede manejar esta situación. (No he mirado su API de análisis, pero estoy seguro de que va a estar bien.)

  • Ordenar null-data last en la consulta de la base de datos
  • Android, cómo ejecutar un archivo sql en sqlitedatabase
  • ¿Cómo puedo comprobar si mi tabla sqlite contiene datos?
  • No se pudo asignar CursorWindow
  • Android: SQLite, cursor.moveToNext () siempre devuelve false
  • DBFlow seleccionar donde COLUMN en la lista?
  • ¿Qué caracteres no se pueden utilizar para valores en bases de datos SQLite?
  • Consulta SQLite en orden alfabético no sensible a mayúsculas
  • Alcanzó el tamaño MAX para la caché de instrucciones compiladas-sql para la base de datos
  • Datos dinámicamente de datos de tabla de Android
  • Android rawQuery - ¿Hay una manera de usar "IN" parametrizada para una colección de datos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.