Ich möchte die Zeitzone vom Android-Handy abrufen, wenn ich auf eine Schaltfläche klicke.
Ich möchte die Zeitzone vom Android-Handy abrufen, wenn ich auf eine Schaltfläche klicke.
Antworten:
Haben Sie versucht zu verwenden TimeZone.getDefault()
:
Die meisten Anwendungen verwenden TimeZone.getDefault (), das eine Zeitzone basierend auf der Zeitzone zurückgibt, in der das Programm ausgeführt wird.
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());
Ausgabe:
TimeZone GMT + 09: 30 Timezon id :: Australien / Darwin
Bearbeiten: Der Fall wurde korrigiert
Ich brauchte den Offset , der nicht nur die Sommerzeit, sondern auch eine Ziffer enthielt . Hier ist der Code, den ich verwendet habe, falls jemand nach einem Beispiel sucht.
Ich bekomme eine Antwort von "3,5" (3:30 ') , was ich im Winter in Teheran, Iran, und "4,5" (4:30') für den Sommer erwarten würde .
Ich brauchte es auch als Zeichenfolge, damit ich es auf einem Server veröffentlichen konnte, sodass Sie möglicherweise nicht die letzte Zeile benötigen.
um die richtige Zeitzone zu erhalten:
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);
Versuchen Sie diesen Code-
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Die vom Benutzer ausgewählte Zeitzone wird zurückgegeben.
Calendar
Objekt dafür zu erstellen ist ein Unsinn. Die Erstellung dieser Art von Objekt ist teuer. TimeZone.getDefault()
ist der geeignete Weg, um dies zu bekommen.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Es wird wie gedruckt
Asia/Kolkata
Einfachste Lösung mit einfachem Datumsformat: 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 " );
==> Ausgabe ist: +05: 30
Laut http://developer.android.com/reference/android/text/format/Time.html sollten Sie Time.getCurrentTimezone () verwenden, um die aktuelle Zeitzone des Geräts abzurufen.
Moderne Antwort:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Als ich dieses Snippet in der Zeitzone Australien / Sydney ausgeführt habe, war die Ausgabe genau das:
Australia/Sydney
Wenn Sie möchten, dass die Sommerzeit (DST) den Namen oder die Abkürzung der Zeitzone berücksichtigt:
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
Die TimeZone
Klasse, die in den meisten anderen Antworten verwendet wurde, war die, die wir hatten, als die Frage 2011 gestellt wurde, obwohl sie schlecht gestaltet war. Heute ist es längst veraltet, und ich empfehle, stattdessen java.time zu verwenden, die moderne Java-API für Datum und Uhrzeit, die 2014 veröffentlicht wurde.
java.time funktioniert sowohl auf älteren als auch auf neueren Android-Geräten. Es erfordert nur mindestens Java 6 .
org.threeten.bp
Zeitklassen mit Unterpaketen importieren.java.time
zuerst beschrieben wurde.java.time
Java 6 und 7 (ThreeTen für JSR-310).Für Geräte mit API 26 und höher können Sie dies folgendermaßen erhalten:
ZonedDateTime.now().getZone().toString();
Alle Antworten hier scheinen darauf hinzudeuten, den Daylite-Parameter auf false zu setzen . Dies ist für viele Zeitzonen falsch, in denen die abgekürzten Namen je nach Jahreszeit geändert werden (z. B. EST vs EDT).
Die folgende Lösung gibt Ihnen die richtige Abkürzung entsprechend dem aktuellen Datum für die Zeitzone.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
Klasse ist schlecht gestaltet und längst veraltet.