Я хочу отримати часовий пояс з мобільного Android під час натискання кнопки.
Я хочу отримати часовий пояс з мобільного Android під час натискання кнопки.
Відповіді:
Ви намагалися використовувати TimeZone.getDefault()
:
Більшість додатків використовуватимуть TimeZone.getDefault (), який повертає TimeZone на основі часового поясу, в якому працює програма.
Посилання: 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());
Вихід:
TimeZone GMT + 09: 30 Ідентифікатор Timezon :: Австралія / Дарвін
Правка: виправлена справа
Мені знадобилося зміщення, яке не тільки включало час денного світла, але і як числове . Ось код, який я використав у випадку, якщо хтось шукає приклад.
Я отримую відповідь "3,5" (3:30 ') , що я б очікував в Тегерані, Іран взимку і "4,5" (4:30') влітку.
Також він мені знадобився як рядок, щоб я міг відправити його на сервер, щоб вам не знадобився останній рядок.
для отримання точного часового поясу:
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);
Спробуйте цей код-
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Він поверне вибраний користувачем часовий пояс.
Calendar
об’єкта для цього - нісенітниця. Створення такого типу об’єктів коштує дорого. TimeZone.getDefault()
це відповідний спосіб отримати це.
TimeZone timeZone = TimeZone.getDefault();
timeZone.getID();
Це буде друкуватися як
Asia/Kolkata
Найпростіше рішення з простим форматом дати: 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 " );
==> Вихід: +05: 30
Відповідно до http://developer.android.com/reference/android/text/format/Time.html, ви повинні використовувати Time.getCurrentTimezone () для отримання поточного часового поясу пристрою.
Сучасна відповідь:
ZoneId zone = ZoneId.systemDefault();
System.out.println(zone);
Коли я запускав цей фрагмент в часовому поясі Австралія / Сідней, результат був саме таким:
Australia/Sydney
Якщо ви хочете, щоб літня пора (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
Клас , який використовується в більшості інших відповідей було те , що ми мали , коли це питання було задано в 2011 році, незважаючи на те, що був погано опрацьований. Сьогодні це давно застаріло, і я рекомендую замість цього використовувати java.time, сучасний API дати та часу Java, який вийшов у 2014 році.
java.time чудово працює як на старих, так і на нових пристроях Android. Для цього просто потрібно принаймні Java 6 .
org.threeten.bp
з підпакетів.java.time
вперше було описано.java.time
Java 6 і 7 (ThreeTen для JSR-310).Для пристроїв з API 26 та новішими версіями ви можете отримати його так:
ZonedDateTime.now().getZone().toString();
Здається, всі відповіді тут пропонують встановити параметр daylite на значення false . Це невірно для багатьох часових поясів, які змінюють скорочені назви залежно від часу року (наприклад, EST проти EDT).
Наведене нижче рішення дасть вам правильну абревіатуру відповідно до поточної дати для часового поясу.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
TimeZone
Клас погано розроблені і давно застаріли.