Fechas horarias de la fecha de Android driving me nuts

Tengo una aplicación de Android que funciona con el módulo GPS y una base de datos SQLite. Todo suena muy bien al principio, pero el horror viene cuando necesito trabajar con Date () y zonas horarias.

Un poco de fondo

El módulo GPS tiene la posibilidad de obtener la fecha del satélite. Esto es una gran cosa y lo necesito en mi aplicación para asegurar datos válidos. La fecha devuelta es GMT. Esta fecha se inserta en un campo de la base de datos local como StartTime. El StartTime se almacena encriptado con AES. Cuando descifrar el StartTime, necesito convertirlo como una fecha y mantener el formato como GMT.

Lo que hago Obtenga los datos del GPS en LocationListener:

gpsDate = new Date(location.getTime()); 

Al tener nueva Fecha () por defecto la fecha GPS se convierte en la zona horaria actual del Dispositivo. Así que en lugar de tener un buen domingo Dic 05 14:00:00 GMT hora 2010 , me sale Domingo Dic 05 16:00:00 GMT + 2 2010 . Porque hace eso ? Sólo quería una nueva fecha fuera de la getTime ().

Inserto los datos en la base de datos:

 SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); outputFormat.setTimeZone(TimeZone.getTimeZone("GMT")); String date = outputFormat.format(gpsDate); 

Recupero la fecha cuando la necesito:

 SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); outputFormat.setTimeZone(TimeZone.getTimeZone("GMT")); String myStored = {decrypy from the database} Date myStartDate = outputFormat.parse(myStoredDate); 

MyStored muestra: 2010-12-05 14:00

MyStartDate muestra: Dom Dic 05 16:00:00 GMT + 2 2010

Hay algo que me falta aquí. Tengo que ser capaz de obtener la fecha en formato GMT, insertar, convertir, comparar, calcular las diferencias. Necesito la fecha en los usuarios de Timezone sólo cuando tengo que mostrar a él.

Por favor, ilumíname.

El problema parece ser que no está almacenando la zona horaria. Usted mismo lo dijo que myStored, cuando se recuperó de dondequiera que lo almacenó, vuelve sin una TZ. Entonces, cuando usted llama parse en él, usted lo fuerza para utilizar GMT. Dado que GMT es de 2 horas diferente de su zona horaria local, el tiempo sale 2 horas diferentes.

En pocas palabras, debe ser capaz de tomar el tiempo de satélite, utilice el formato simple con la opción z o Z ​​para dar formato a la salida a donde la esté almacenando. Usted no debe incluso utilizar el método setTimezone en absoluto. A continuación, utilice el mismo formato de fecha como antes, y no uno nuevo, para analizar la fecha de entrada desde donde lo almacenó.

Después de haber hecho eso, antes de enviar la salida al usuario, determine su zona horaria y, a continuación, establezca el huso horario en los datos que tiene.

  • Problema de zona horaria en Android
  • Cómo manejar la diferencia de zona horaria entre el servidor y la aplicación nativa de Android?
  • Obtener la zona horaria local del dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.