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", "TimeZone:" + gmt1 + "\ t" + gmt2); A to jest kod
asha v
10
Nie byłbym taki szorstki w stosunku do asha v. Szukałem tylko tego samego, a odpowiedzi, które znalazłem, były inne niż te. Właściwie wyszukiwanie według dokładnego „TimeZone.getDefault” doprowadziło mnie tutaj.
Yar
Odpowiedzi:
189
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.
Jeśli korzystasz z JodaTime , możesz uzyskać DateTimeZone z następującymi elementami :DateTimeZone.forTimeZone(TimeZone.getDefault());
Joshua Pinter
@JoshPinter, którego pakietu używam, tego na android.icu.utils czy java.util?
Neon Warge
1
Zmieniłem strefę czasową z urządzenia na CST, nie zwraca mi CST. Czy jest sposób, aby uzyskać strefę czasową urządzenia?
Abhinav Saxena
Zastanawiam się, czy TimeZone.getDefault działa, jeśli w jakiś sposób sfałszujemy strefę czasową urządzenia. Wygląda na to, że nie ma go w symulatorze Androida.
Hau Luu
@NeonWarge Oba będą działać, chociaż android.icu działa tylko dla API 24 i nowszych.
Nicolas
136
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
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 =newDate();//Import part : x.0 for double numberdouble offsetFromUtc = tz.getOffset(now.getTime())/3600000.0;String m2tTimeZoneIs =Double.parseDouble(offsetFromUtc);
Tworzenie w Calendartym celu obiektu to nonsens. Stworzenie tego typu obiektów jest kosztowne. TimeZone.getDefault()jest właściwym sposobem, aby to osiągnąć.
anonimowy
3
@KrLx_roller Sprawdź dokładnie, zanim zgodzisz głosowanie. Napisałem, że moja odpowiedź zwraca strefę czasową wybraną przez użytkownika, podczas gdy TimeZone.getDefault () zwróci domyślną strefę czasową instalacji. Aby uzyskać więcej informacji, prosimy o code.google.com/p/android/issues/detail?id=2037 .
anujprashar
Twój kod zwraca tę samą strefę czasową co TimeZone.getDefault () na Androidzie 4.2. TimeZone.getDefault () zwróci strefę czasową wybraną w ustawieniach -> data i czas.
TimeZoneKlasa 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.
Pytanie: Czy java.time nie wymaga interfejsu API systemu Android na poziomie 26?
java.time działa dobrze zarówno na starszych, jak i nowszych urządzeniach z Androidem. Wymaga tylko co najmniej Javy 6 .
W Javie 8 i nowszych oraz na nowszych urządzeniach z Androidem (od poziomu API 26) wbudowane jest nowoczesne API.
W wersjach Java 6 i 7 innych niż Android pobierz ThreeTen Backport, zaplecze nowoczesnych klas (ThreeTen dla JSR 310; patrz linki na dole).
Na (starszym) systemie Android użyj wersji ThreeTen Backport na Androida. Nazywa się ThreeTenABP. I upewnij się, że importujesz klasy daty i czasu org.threeten.bpz podpakietami.
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)
Odpowiedzi:
Czy próbowałeś użyć
TimeZone.getDefault()
:Ref: http://developer.android.com/reference/java/util/TimeZone.html
źródło
DateTimeZone.forTimeZone(TimeZone.getDefault());
Wynik:
źródło
Edycja: poprawiono sprawę
TimeZone.getDefault()
źródło
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ą:
źródło
Wypróbuj ten kod-
Zwróci strefę czasową wybraną przez użytkownika.
źródło
Calendar
tym celu obiektu to nonsens. Stworzenie tego typu obiektów jest kosztowne.TimeZone.getDefault()
jest właściwym sposobem, aby to osiągnąć.Będzie drukować jak
źródło
Najprostsze rozwiązanie z prostym formatem daty: SimpleDateFormat („ZZZZZ”):
==> Wynik to: +05: 30
źródło
Według http://developer.android.com/reference/android/text/format/Time.html powinieneś używać Time.getCurrentTimezone () do pobierania aktualnej strefy czasowej urządzenia.
źródło
ZoneId z java.time i ThreeTenABP
Nowoczesna odpowiedź:
Kiedy uruchomiłem ten fragment w strefie czasowej Australii / Sydney, wynik był dokładnie taki:
Jeśli chcesz mieć nazwę strefy czasowej lub jej skrót uwzględniający czas letni (DST):
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.Pytanie: Czy java.time nie wymaga interfejsu API systemu Android na poziomie 26?
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.Spinki do mankietów
java.time
zostało po raz pierwszy opisane.java.time
Java 6 i 7 (ThreeTen dla JSR-310).źródło
W przypadku urządzeń z API 26 i nowszym możesz to uzyskać w ten sposób:
źródło
Na moim urządzeniu
TimeZone.getDefault()
zawsze wraca strefa czasowa UTC.Muszę to zrobić, aby uzyskać strefę czasową skonfigurowaną przez użytkownika:
Zwróci strefę czasową wybraną przez użytkownika.
źródło
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.
źródło
TimeZone
Klasa jest źle zaprojektowana i długo nieaktualne.