TimeZone tz = TimeZone.getDefault (); Cadena gmt1 = TimeZone.getTimeZone (tz.getID ()). GetDisplayName (false, TimeZone.SHORT); Cadena gmt2 = TimeZone.getTimeZone (tz.getID ()). GetDisplayName (false, TimeZone.LONG); Log.d ("Etiqueta", "Zona horaria:" + gmt1 + "\ t" + gmt2); Y este es el código
Asha v
10
No sería tan rudo con asha v. Solo estaba buscando lo mismo y las respuestas que encontré fueron diferentes a estas. En realidad, la búsqueda por el "TimeZone.getDefault" exacto me llevó aquí.
Yar
Respuestas:
189
¿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.
Si está utilizando JodaTime , puede obtener una DateTimeZone con lo siguiente:DateTimeZone.forTimeZone(TimeZone.getDefault());
Joshua Pinter
@JoshPinter, ¿qué paquete utilizo, el de android.icu.utils o el java.util?
Neon Warge
1
Cambié la zona horaria del dispositivo a CST, no me devuelve CST. ¿Hay alguna forma de obtener la zona horaria del dispositivo?
Abhinav Saxena
Me pregunto si TimeZone.getDefault se verá afectado si de alguna manera falsificamos la zona horaria del dispositivo. Parece que no está en el simulador de Android.
Hau Luu
@NeonWarge Ambos funcionarán, aunque android.icu solo funciona para API 24 y superior.
Nicolas
136
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
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 =newDate();//Import part : x.0 for double numberdouble offsetFromUtc = tz.getOffset(now.getTime())/3600000.0;String m2tTimeZoneIs =Double.parseDouble(offsetFromUtc);
Crear un Calendarobjeto 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.
Anónimo
3
@KrLx_roller Por favor, verifique cuidadosamente antes de rechazar la respuesta. He escrito mi respuesta devuelve la zona horaria seleccionada por el usuario, mientras que TimeZone.getDefault () devolverá la zona horaria predeterminada de instalación. Para obtener más información, code.google.com/p/android/issues/detail?id=2037 .
anujprashar
Su código devuelve la misma zona horaria que TimeZone.getDefault () en Android 4.2. TimeZone.getDefault () devolverá la zona horaria seleccionada en la configuración -> fecha y hora.
La TimeZoneclase 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.
Pregunta: ¿java.time no requiere el nivel 26 de la API de Android?
java.time funciona bien en dispositivos Android más antiguos y más nuevos. Solo requiere al menos Java 6 .
En Java 8 y versiones posteriores y en dispositivos Android más nuevos (desde el nivel 26 de API), la API moderna viene incorporada.
En Java 6 y 7 que no sean Android, obtenga ThreeTen Backport, el backport de las clases modernas (ThreeTen para JSR 310; vea los enlaces en la parte inferior).
En Android (anterior) use la edición de Android de ThreeTen Backport. Se llama ThreeTenABP. Y asegúrese de importar las clases de fecha y hora org.threeten.bpcon subpaquetes.
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)
Respuestas:
¿Has intentado usar
TimeZone.getDefault()
:Ref: http://developer.android.com/reference/java/util/TimeZone.html
fuente
DateTimeZone.forTimeZone(TimeZone.getDefault());
Salida:
fuente
Editar: corrigió el caso
TimeZone.getDefault()
fuente
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:
fuente
Prueba este código
Devolverá la zona horaria seleccionada por el usuario.
fuente
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.Se imprimirá como
fuente
Solución más simple con formato de fecha simple: SimpleDateFormat ("ZZZZZ"):
==> La salida es: +05: 30
fuente
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.
fuente
ZoneId de java.time y ThreeTenABP
Respuesta moderna:
Cuando ejecuté este fragmento en la zona horaria de Australia / Sydney, el resultado fue exactamente eso:
Si desea que el horario de verano (DST) conozca el nombre o la abreviatura de la zona horaria:
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.Pregunta: ¿java.time no requiere el nivel 26 de la API de Android?
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.Enlaces
java.time
se describió por primera vez.java.time
Java 6 y 7 (ThreeTen para JSR-310).fuente
Para dispositivos con API 26 y superior, puede obtenerlo así:
fuente
En mi dispositivo
TimeZone.getDefault()
siempre regresa la zona horaria UTC.Necesito hacer esto para obtener la zona horaria configurada por el usuario:
Devolverá la zona horaria seleccionada por el usuario.
fuente
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.
fuente
TimeZone
clase está mal diseñada y anticuada desde hace mucho tiempo.