2011-09-02 21 views
15

Estoy tratando de obtener el desplazamiento UTC en segundos en Android. Como el emulador sigue mostrando 0, no puedo decir si estoy haciendo esto correctamente o no.Cómo obtener el desplazamiento UTC en segundos en Android

Calendar c=Calendar.getInstance(); 
     TimeZone tz=c.getTimeZone(); 
     int offsetFromUtc=tz.getOffset(0)/1000; 

Cuando pongo 0 en el tz.getOffset que significa que sólo quiero el número de segundos desde GMT. Avísame si lo que estoy haciendo es correcto. Gracias

Respuesta

42

Los desplazamientos de zona horaria pueden cambiar durante el año, tal vez la razón más común es el horario de verano. En lugar de pasar a 0 TimeZone.getOffset() utiliza la hora actual para obtener el desplazamiento actual, crear una nueva fecha y obtener su valor Tiempo:

TimeZone tz = TimeZone.getDefault(); 
Date now = new Date(); 
int offsetFromUtc = tz.getOffset(now.getTime())/1000; 

el emulador por defecto a UTC, trate de comprobar las zonas horarias disponibles para probar. También puede pasar un interruptor de zona horaria para establecer la zona horaria, check the documentation para -timezone.

+0

Olvidé el horario de verano, gracias por el aviso –

+0

Esto no está completo. No todas las zonas horarias son horas redondas, hay zonas horarias fraccionarias como -4.5 para Venezuela. Esto debería ser un flotante/doble, no un int. – Dev2rights

+2

[getOffset] (http://developer.android.com/reference/java/util/TimeZone.html#getOffset (long)) devuelve int con mucha precisión para zonas horarias fraccionarias, hasta el segundo. –

4

La zona horaria predeterminada del emulador es GMT, lo que significa que siempre obtendrá un desplazamiento de 0. Su código se ve bien (no lo intenté). Intenta cambiar la zona horaria de tu emulador por otra cosa y revisa tu código. Eche un vistazo a esta publicación: Link

Cuestiones relacionadas