2012-02-28 9 views
45

¿Cómo puedo obtener la zona horaria actual en mi aplicación Android? Intenté utilizar estoObtener la zona horaria actual en la aplicación de Android

Calendar cal = Calendar.getInstance(userConfig.locale); 
TimeZone tz = cal.getTimeZone(); 

Pero no obtengo la zona horaria a partir de ello. ¿Cómo puedo mostrar la zona horaria?

+1

Si usa 'JodaTime', puede usar' DateTime.now (DateTimeZone.getDefault()); '. Si no está utilizando 'JodaTime', debería verificarlo. –

Respuesta

88

Utilice esta

Calendar cal = Calendar.getInstance(); 
TimeZone tz = cal.getTimeZone(); 
Log.d("Time zone","="+tz.getDisplayName()); 

o también puede utilizar la clase java.util.TimeZone

TimeZone.getDefault().getDisplayName() 
+22

+1 para usar TimeZone.getDefault() en lugar de instanciar un Calendario solo para obtener la zona horaria. – spaaarky21

+0

'TimeZone.getDefault(). GetDisplayName()' funciona bien. –

22
String timezoneID = TimeZone.getDefault().getID(); 
System.out.println(timezoneID); 

En mi consola, imprime Asia/Calcutta

Y cualquier formato de fecha, lo fijo igual ....

SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MMM-yyyy"); 
sdf2.setTimeZone(TimeZone.getTimeZone(timezoneID)); 
-5

Para mostrar la hora actual, se debe ejecutar a continuación fragmento de código en el hilo de la interfaz de usuario Esto funcionó para mí:

Timer timer = new Timer();   
timer.schedule(new TimerTask() {   
    public void run() {  
     runOnUiThread(new Runnable(){  
      public void run() {  
       dateTxt.setText(new Date().toString());  
      }  
     });  
    }  
}, 0, 1000); 
9

que necesitaba el desplazamiento que no sólo incluía el horario de luz día, pero como un numérico Aquí está el código que utilicé en caso de que alguien esté buscando un ejemplo.

Recibo una respuesta de "11", que es lo que esperaría en NSW, Australia en verano. También lo necesitaba como una cadena para poder publicarlo en un servidor, por lo que es posible que no necesites la última línea.

TimeZone tz = TimeZone.getDefault(); 
Date now = new Date(); 
int offsetFromUtc = tz.getOffset(now.getTime())/3600000; 
String m2tTimeZoneIs = Integer.toString(offsetFromUtc); 
+0

Esto es exactamente lo que estoy buscando. +1 para esta respuesta – user2759156

+3

Esto no funcionará para zonas horarias con diferencias de media hora como Terranova que es GMT-2: 30, simplemente obtendría 2 de vuelta – pkramaric

Cuestiones relacionadas