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
- Comportamiento extraño de la consulta SQLite parametrizada
- Comprobación del resultado de rawQuery de Android
- Cómo leer una columna específica de SQLiteBatabase existente en Android?
- Android Sqlite IN, sin sintaxis
- SQL Android Formulación de consultas con múltiples condiciones
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?
- Android, Ormlite, ubicación de DB
- Obtener nueva fila agregada en la tabla SQLite
- La mejor manera de trabajar con las fechas en Android SQLite
- Conectando a la base de datos externa - Aplicación de Android
- Comprobación de Android cuando se actualizó la última vez
- SQLite de Android: Actualización
- ¿Cómo consultar la base de datos SQLite con dos condiciones?
- ¿Por qué la aplicación PhoneGap de Android se bloquea al insertar un montón de datos en SQL?
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.)
- Cual es mejor, loader o AsyncTask?
- Cómo manejar el botón de nuevo de la vista de búsqueda en android