TimeZone tz = TimeZone.getDefault (); String gmt1 = TimeZone.getTimeZone (tz.getID ()). GetDisplayName (false, TimeZone.SHORT); String gmt2 = TimeZone.getTimeZone (tz.getID ()). GetDisplayName (false, TimeZone.LONG); Log.d ("Tag", "Fuso Horário:" + gmt1 + "\ t" + gmt2); E este é o código
asha v
10
Eu não seria tão duro com asha v. Eu estava apenas procurando a mesma coisa e as respostas que encontrei foram diferentes dessas. Na verdade, pesquisar pelo exato "TimeZone.getDefault" me levou aqui.
Yar
Respostas:
189
Você já tentou usar TimeZone.getDefault():
A maioria dos aplicativos usa o TimeZone.getDefault (), que retorna um TimeZone com base no fuso horário em que o programa está sendo executado.
Se você estiver usando o JodaTime , poderá obter um DateTimeZone com o seguinte:DateTimeZone.forTimeZone(TimeZone.getDefault());
Joshua Pinter
@ JoshPinter qual pacote devo usar, o do android.icu.utils ou o java.util?
Neon Warge
1
Alterei o fuso horário do dispositivo para CST, ele não está me devolvendo o CST. Existe uma maneira de obter o fuso horário do dispositivo?
Abhinav Saxena
Gostaria de saber se o TimeZone.getDefault será afetado se, de alguma forma, forjarmos o fuso horário do dispositivo. Parece não estar no simulador do Android.
Hau Luu
136
TimeZone tz =TimeZone.getDefault();System.out.println("TimeZone "+tz.getDisplayName(false,TimeZone.SHORT)+" Timezon id :: "+tz.getID());
Resultado:
Fuso horário GMT + 09:30 id do fuso horário :: Austrália / Darwin
Eu precisava da compensação que incluísse não apenas o horário de verão, mas também numérico . Aqui está o código que eu usei no caso de alguém procurar um exemplo.
Eu recebo uma resposta de "3.5" (3:30 '), o que eu esperaria em Teerã, Irã no inverno e "4.5" (4:30') no verão.
Eu também precisava disso como uma string para que eu pudesse publicá-la em um servidor, para que você não precise da última linha.
para obter o fuso horário atual:
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);
Criar um Calendarobjeto para isso é um absurdo. A criação desse tipo de objeto é cara. TimeZone.getDefault()é a maneira apropriada de conseguir isso.
anonymous
3
@KrLx_roller Por favor, verifique cuidadosamente antes de responder a uma votação negativa. Escrevi que minha resposta retorna o fuso horário selecionado pelo usuário, enquanto TimeZone.getDefault () retornará o fuso horário padrão da instalação. Para mais informações, code.google.com/p/android/issues/detail?id=2037 .
precisa saber é o seguinte
Seu código retorna o mesmo fuso horário que TimeZone.getDefault () no android 4.2. TimeZone.getDefault () retornará o fuso horário selecionado nas configurações -> data e hora.
A TimeZoneclasse usada na maioria das outras respostas foi a que tínhamos quando a pergunta foi feita em 2011, apesar de ter sido mal projetada. Hoje está desatualizado há muito tempo, e eu recomendo que, em vez disso, usemos java.time, a moderna API de data e hora do Java que foi lançada em 2014.
Pergunta: O java.time não requer a API do Android nível 26?
O java.time funciona bem em dispositivos Android mais antigos e mais recentes. Requer apenas pelo menos Java 6 .
No Java 8 e posterior e em dispositivos Android mais recentes (do nível 26 da API), a API moderna é incorporada.
Nos Java 6 e 7 não Android, obtenha o ThreeTen Backport, o backport das classes modernas (ThreeTen para JSR 310; veja os links na parte inferior).
No Android (mais antigo), use a edição Android do ThreeTen Backport. Chama-se ThreeTenABP. E certifique-se de importar as classes de data e hora org.threeten.bpcom subpacotes.
Todas as respostas aqui parecem sugerir a configuração do parâmetro daylite como false . Isso está incorreto para muitos fusos horários que alteram nomes abreviados, dependendo da época do ano (por exemplo, EST vs EDT).
A solução abaixo fornecerá a abreviação correta de acordo com a data atual do fuso horário.
val tz =TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite,TimeZone.SHORT)
Respostas:
Você já tentou usar
TimeZone.getDefault()
:Ref: http://developer.android.com/reference/java/util/TimeZone.html
fonte
DateTimeZone.forTimeZone(TimeZone.getDefault());
Resultado:
fonte
Edit: corrigido o caso
TimeZone.getDefault()
fonte
Eu precisava da compensação que incluísse não apenas o horário de verão, mas também numérico . Aqui está o código que eu usei no caso de alguém procurar um exemplo.
Eu recebo uma resposta de "3.5" (3:30 '), o que eu esperaria em Teerã, Irã no inverno e "4.5" (4:30') no verão.
Eu também precisava disso como uma string para que eu pudesse publicá-la em um servidor, para que você não precise da última linha.
para obter o fuso horário atual:
fonte
Experimente este código-
Ele retornará o fuso horário selecionado pelo usuário.
fonte
Calendar
objeto para isso é um absurdo. A criação desse tipo de objeto é cara.TimeZone.getDefault()
é a maneira apropriada de conseguir isso.Imprimirá como
fonte
Solução mais simples com formato simples de data: SimpleDateFormat ("ZZZZZ"):
==> A saída é: +0: 30
fonte
De acordo com http://developer.android.com/reference/android/text/format/Time.html, você deve usar Time.getCurrentTimezone () para recuperar o fuso horário atual do dispositivo.
fonte
ZoneId de java.time e ThreeTenABP
Resposta moderna:
Quando executei esse trecho no fuso horário da Austrália / Sydney, a saída foi exatamente a seguinte:
Se você deseja o nome ou a abreviação do fuso horário com horário de verão (DST):
A
TimeZone
classe usada na maioria das outras respostas foi a que tínhamos quando a pergunta foi feita em 2011, apesar de ter sido mal projetada. Hoje está desatualizado há muito tempo, e eu recomendo que, em vez disso, usemos java.time, a moderna API de data e hora do Java que foi lançada em 2014.Pergunta: O java.time não requer a API do Android nível 26?
O java.time funciona bem em dispositivos Android mais antigos e mais recentes. Requer apenas pelo menos Java 6 .
org.threeten.bp
com subpacotes.Ligações
java.time
foi descrito pela primeira vez.java.time
para Java 6 e 7 (ThreeTen para JSR-310).fonte
Para dispositivos com API 26 e superior, você pode obtê-lo assim:
fonte
No meu dispositivo
TimeZone.getDefault()
está sempre retornando o fuso horário UTC.Preciso fazer isso para obter o fuso horário configurado pelo usuário:
Ele retornará o fuso horário selecionado pelo usuário.
fonte
Todas as respostas aqui parecem sugerir a configuração do parâmetro daylite como false . Isso está incorreto para muitos fusos horários que alteram nomes abreviados, dependendo da época do ano (por exemplo, EST vs EDT).
A solução abaixo fornecerá a abreviação correta de acordo com a data atual do fuso horário.
fonte
TimeZone
classe é mal projetada e desatualizada há muito tempo.