Quiero obtener la zona horaria del dispositivo móvil Android cuando hago clic en un botón.
Quiero obtener la zona horaria del dispositivo móvil Android cuando hago clic en un botón.
Respuestas:
¿Has intentado usar TimeZone.getDefault()
:
La mayoría de las aplicaciones usarán TimeZone.getDefault () que devuelve una TimeZone basada en la zona horaria donde se ejecuta el programa.
Ref: http://developer.android.com/reference/java/util/TimeZone.html
DateTimeZone.forTimeZone(TimeZone.getDefault());
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());
Salida:
TimeZone GMT + 09: 30 Identificación de Timezon :: Australia / Darwin
Editar: corrigió el caso
Necesitaba la compensación que no solo incluía el horario de verano sino también como un número . Aquí está el código que usé en caso de que alguien esté buscando un ejemplo.
Recibo una respuesta de "3.5" (3:30 ') que es lo que esperaría en Teherán, Irán en invierno y "4.5" (4:30') para el verano.
También lo necesitaba como una cadena para poder publicarlo en un servidor para que no necesite la última línea.
para obtener la zona horaria correcta:
TimeZone tz = TimeZone.getDefault();
Date now = new Date();
//Import part : x.0 for double number
double offsetFromUtc = tz.getOffset(now.getTime()) / 3600000.0;
String m2tTimeZoneIs = Double.parseDouble(offsetFromUtc);
Prueba este código
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Devolverá la zona horaria seleccionada por el usuario.
Calendar
objeto para esto es una tontería. La creación de este tipo de objeto es costosa. TimeZone.getDefault()
es la forma adecuada de obtener esto.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Se imprimirá como
Asia/Kolkata
Solución más simple con formato de fecha simple: SimpleDateFormat ("ZZZZZ"):
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
Locale.getDefault());
Date currentLocalTime = calendar.getTime();
DateFormat date = new SimpleDateFormat("ZZZZZ",Locale.getDefault());
String localTime = date.format(currentLocalTime);
System.out.println(localTime+ " TimeZone " );
==> La salida es: +05: 30
De acuerdo con http://developer.android.com/reference/android/text/format/Time.html , debería usar Time.getCurrentTimezone () para recuperar la zona horaria actual del dispositivo.
Respuesta moderna:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Cuando ejecuté este fragmento en la zona horaria de Australia / Sydney, el resultado fue exactamente eso:
Australia/Sydney
Si desea que el horario de verano (DST) conozca el nombre o la abreviatura de la zona horaria:
DateTimeFormatter longTimeZoneFormatter = DateTimeFormatter.ofPattern("zzzz", Locale.getDefault());
String longTz = ZonedDateTime.now(zone).format(longTimeZoneFormatter);
System.out.println(longTz);
DateTimeFormatter shortTimeZoneFormatter = DateTimeFormatter.ofPattern("zzz", Locale.getDefault());
String shortTz = ZonedDateTime.now(zone).format(shortTimeZoneFormatter);
System.out.println(shortTz);
Eastern Summer Time (New South Wales) EST
La TimeZone
clase utilizada en la mayoría de las otras respuestas era la que teníamos cuando se hizo la pregunta en 2011, a pesar de que estaba mal diseñada. Hoy está obsoleto desde hace mucho tiempo, y recomiendo que en su lugar usemos java.time, la API moderna de fecha y hora de Java que salió en 2014.
java.time funciona bien en dispositivos Android más antiguos y más nuevos. Solo requiere al menos Java 6 .
org.threeten.bp
con subpaquetes.java.time
se describió por primera vez.java.time
Java 6 y 7 (ThreeTen para JSR-310).Para dispositivos con API 26 y superior, puede obtenerlo así:
ZonedDateTime.now().getZone().toString();
Todas las respuestas aquí parecen sugerir establecer el parámetro daylite en falso . Esto es incorrecto para muchas zonas horarias que cambian los nombres abreviados según la época del año (por ejemplo, EST frente a EDT).
La solución a continuación le dará la abreviatura correcta de acuerdo con la fecha actual para la zona horaria.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
clase está mal diseñada y anticuada desde hace mucho tiempo.