Po kliknięciu przycisku chcę pobrać strefę czasową z telefonu komórkowego z systemem Android.
Po kliknięciu przycisku chcę pobrać strefę czasową z telefonu komórkowego z systemem Android.
Odpowiedzi:
Czy próbowałeś użyć TimeZone.getDefault()
:
Większość aplikacji będzie używać TimeZone.getDefault (), która zwraca TimeZone na podstawie strefy czasowej, w której program jest uruchomiony.
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());
Wynik:
TimeZone GMT + 09: 30 Timezon id :: Australia / Darwin
Edycja: poprawiono sprawę
Potrzebowałem offsetu, który obejmowałby nie tylko czas oszczędzania światła dziennego, ale także liczbę . Oto kod, którego użyłem na wypadek, gdyby ktoś szukał przykładu.
Otrzymuję odpowiedź „3,5” (3:30 '), czyli tego, czego oczekiwałbym w Teheranie, Iranie zimą i „4,5” (4:30') latem.
Potrzebowałem go również jako ciągu znaków, aby móc wysłać go na serwer, więc możesz nie potrzebować ostatniej linii.
aby uzyskać aktualną strefę czasową:
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);
Wypróbuj ten kod-
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Zwróci strefę czasową wybraną przez użytkownika.
Calendar
tym celu obiektu to nonsens. Stworzenie tego typu obiektów jest kosztowne. TimeZone.getDefault()
jest właściwym sposobem, aby to osiągnąć.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Będzie drukować jak
Asia/Kolkata
Najprostsze rozwiązanie z prostym formatem daty: 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 " );
==> Wynik to: +05: 30
Według http://developer.android.com/reference/android/text/format/Time.html powinieneś używać Time.getCurrentTimezone () do pobierania aktualnej strefy czasowej urządzenia.
Nowoczesna odpowiedź:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Kiedy uruchomiłem ten fragment w strefie czasowej Australii / Sydney, wynik był dokładnie taki:
Australia/Sydney
Jeśli chcesz mieć nazwę strefy czasowej lub jej skrót uwzględniający czas letni (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
TimeZone
Klasa stosowany w większości innych odpowiedzi było to, co mieliśmy, gdy pytano w 2011 roku, mimo że został źle zaprojektowany. Dziś jest od dawna przestarzały i polecam zamiast tego używać java.time, nowoczesnego API daty i czasu Java, które pojawiło się w 2014 roku.
java.time działa dobrze zarówno na starszych, jak i nowszych urządzeniach z Androidem. Wymaga tylko co najmniej Javy 6 .
org.threeten.bp
z podpakietami.java.time
zostało po raz pierwszy opisane.java.time
Java 6 i 7 (ThreeTen dla JSR-310).W przypadku urządzeń z API 26 i nowszym możesz to uzyskać w ten sposób:
ZonedDateTime.now().getZone().toString();
Wszystkie odpowiedzi tutaj wydają się sugerować ustawienie parametru daylite na false . Jest to niepoprawne w przypadku wielu stref czasowych, które zmieniają skrócone nazwy w zależności od pory roku (np. EST vs EDT).
Poniższe rozwiązanie poda prawidłowy skrót zgodnie z aktualną datą strefy czasowej.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
Klasa jest źle zaprojektowana i długo nieaktualne.