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
- TimeZone.getTimeZone ("CST") devuelve GMT
- Obtención de la zona horaria en android
- Lista predeterminada de zonas horarias de Android
- ¿De dónde toma Android la zona horaria predeterminada?
- Obtenga el país de un determinado huso horario de Java
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.
- ¿Cuáles son algunos ejemplos de valores devueltos por TimeZone.getAvailableIDs ()?
- Cómo convertir el tiempo en AAAA-MM-DDTHH: mm: ss.SSSZ formato a la zona horaria por defecto?
- Android cómo configurar la zona horaria a través de la aplicación
- Android cómo obtener diferencia de tiempo entre dos zonas horarias en Android?
- Android AlarmManager y DST / Timezone / Cambio de hora?
- ¿Cómo obtener la compensación horaria en GMT (como GMT + 7: 00) desde el dispositivo Android?
- Conversión de las fechas UTC a otras zonas horarias
- Jodatime cómo saber si el horario de verano está en
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.
- Android – ImageView que muestra la imagen de la Galería en "paisaje"
- Cómo a la actividad del paisaje en el TabHost?