Voglio ottenere il fuso orario dal cellulare Android quando si fa clic su un pulsante.
Voglio ottenere il fuso orario dal cellulare Android quando si fa clic su un pulsante.
Risposte:
Hai provato a usare TimeZone.getDefault():
La maggior parte delle applicazioni utilizzerà TimeZone.getDefault () che restituisce un fuso orario in base al fuso orario in cui è in esecuzione il programma.
Rif: 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());
Produzione:
TimeZone GMT + 09: 30 Timezon id :: Australia / Darwin
Modifica: corretto il caso
Avevo bisogno dell'offset che includeva non solo l'ora legale, ma come un numero . Ecco il codice che ho usato nel caso qualcuno stia cercando un esempio.
Ricevo una risposta di "3,5" (3:30 ') che è quello che mi aspetterei a Teheran, in Iran in inverno e "4.5" (4:30') per l'estate.
Ne avevo anche bisogno come stringa in modo da poterlo pubblicare su un server in modo da non aver bisogno dell'ultima riga.
per ottenere il fuso orario currect:
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);
Prova questo codice
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Restituirà il fuso orario selezionato dall'utente.
Calendaroggetto per questo è una sciocchezza. La creazione di questo tipo di oggetto è costosa. TimeZone.getDefault()è il modo appropriato per ottenere questo.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Stampa come
Asia/Kolkata
Soluzione più semplice con formato data semplice: 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 " );
==> L'output è: +05: 30
Secondo http://developer.android.com/reference/android/text/format/Time.html dovresti utilizzare Time.getCurrentTimezone () per recuperare il fuso orario corrente del dispositivo.
Risposta moderna:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Quando ho eseguito questo snippet nel fuso orario di Australia / Sydney, l'output era esattamente questo:
Australia/Sydney
Se si desidera il nome del fuso orario o l'ora abbreviata dell'ora legale (DST):
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 TimeZoneclasse utilizzata nella maggior parte delle altre risposte era quella che avevamo quando la domanda è stata posta nel 2011, anche se era stata progettata male. Oggi è obsoleto da tempo e raccomando invece di usare java.time, la moderna API di data e ora di Java che è stata lanciata nel 2014.
java.time funziona perfettamente su dispositivi Android vecchi e nuovi. Richiede solo almeno Java 6 .
org.threeten.bpcon i pacchetti secondari.java.timestato descritto per la prima volta.java.timeJava 6 e 7 (ThreeTen per JSR-310).Per i dispositivi con API 26 e successive, puoi ottenerlo in questo modo:
ZonedDateTime.now().getZone().toString();
Tutte le risposte qui sembrano suggerire di impostare il parametro daylite su false . Ciò non è corretto per molti fusi orari che cambiano i nomi abbreviati a seconda del periodo dell'anno (ad esempio EST vs EDT).
La soluzione seguente ti fornirà l'abbreviazione corretta in base alla data corrente per il fuso orario.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZoneclasse è mal progettata e obsoleta da tempo.