Я бы не стал так грубо говорить о asha v. Я просто искал то же самое, и ответы, которые я нашел, были отличны от этих. Фактически поиск по точному "TimeZone.getDefault" привел меня сюда.
Яр
Ответы:
196
Вы пробовали использовать TimeZone.getDefault():
Большинство приложений будут использовать TimeZone.getDefault (), который возвращает часовой пояс в зависимости от часового пояса, в котором запущена программа.
Мне нужно было смещение, которое учитывало бы не только переход на летнее время, но и числовое значение . Вот код, который я использовал на случай, если кто-то ищет пример.
Я получаю ответ «3,5» (3:30 '), чего я ожидал бы в Тегеране, Иран зимой, и «4,5» (4:30') летом.
Мне также нужно было это в виде строки, чтобы я мог отправить ее на сервер, чтобы вам не понадобилась последняя строка.
для получения текущего часового пояса:
TimeZone tz = TimeZone.getDefault();
Date now = new Date();
//Import part : x.0 for double numberdouble offsetFromUtc = tz.getOffset(now.getTime()) / 3600000.0;
String m2tTimeZoneIs = Double.parseDouble(offsetFromUtc);
Создавать Calendarдля этого объект - нонсенс. Создание такого объекта стоит дорого. TimeZone.getDefault()- подходящий способ получить это.
анонимный
3
@KrLx_roller Пожалуйста, внимательно проверьте ответ, прежде чем голосовать против. Я написал, что мой ответ возвращает часовой пояс, выбранный пользователем, тогда как TimeZone.getDefault () вернет часовой пояс по умолчанию для установки. Для получения дополнительной информации code.google.com/p/android/issues/detail?id=2037 .
anujprashar 08
Ваш код возвращает тот же часовой пояс, что и TimeZone.getDefault () на android 4.2. TimeZone.getDefault () вернет часовой пояс, выбранный в настройках -> дата и время.
В TimeZoneбольшинстве других ответов использовался тот же класс, что и у нас, когда вопрос задавали в 2011 году, хотя он был плохо спроектирован. Сегодня он давно устарел, и я рекомендую вместо него использовать java.time, современный API даты и времени Java, выпущенный в 2014 году.
Вопрос: Разве java.time не требует Android API 26 уровня?
java.time прекрасно работает как на старых, так и на новых устройствах Android. Просто требуется как минимум Java 6 .
В Java 8 и новее, а также на новых устройствах Android (начиная с уровня API 26) современный API встроен.
В Java 6 и 7, отличных от Android, получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
На (более старом) Android используйте Android-версию ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bpподпакетов.
Все ответы здесь, похоже, предлагают установить для параметра daylite значение false . Это неверно для многих часовых поясов, которые меняют сокращенные названия в зависимости от времени года (например, EST или EDT).
Приведенное ниже решение предоставит вам правильное сокращение в соответствии с текущей датой для часового пояса.
val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)
Ответы:
Вы пробовали использовать
TimeZone.getDefault()
:Ссылка: 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.getDefault()
источник
Мне нужно было смещение, которое учитывало бы не только переход на летнее время, но и числовое значение . Вот код, который я использовал на случай, если кто-то ищет пример.
Я получаю ответ «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
для этого объект - нонсенс. Создание такого объекта стоит дорого.TimeZone.getDefault()
- подходящий способ получить это.Он будет напечатан как
источник
ZoneId из java.time и ThreeTenABP
Современный ответ:
Когда я запустил этот фрагмент в часовом поясе Австралии / Сиднея, результат был именно таким:
Если вы хотите использовать название часового пояса с учетом летнего времени (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);
В
TimeZone
большинстве других ответов использовался тот же класс, что и у нас, когда вопрос задавали в 2011 году, хотя он был плохо спроектирован. Сегодня он давно устарел, и я рекомендую вместо него использовать java.time, современный API даты и времени Java, выпущенный в 2014 году.Вопрос: Разве java.time не требует Android API 26 уровня?
java.time прекрасно работает как на старых, так и на новых устройствах Android. Просто требуется как минимум Java 6 .
org.threeten.bp
подпакетов.Ссылки
java.time
было впервые описано.java.time
в Java 6 и 7 (ThreeTen для JSR-310).источник
Самое простое решение с простым форматом даты: 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 () для получения текущего часового пояса устройства.
источник
На моем устройстве
TimeZone.getDefault()
всегда возвращается часовой пояс UTC.Мне нужно сделать это, чтобы настроить часовой пояс пользователя:
TimeZone.setDefault(null) val tz = TimeZone.getDefault()
Он вернет выбранный пользователем часовой пояс.
источник
Для устройств с API 26 и выше получить это можно так:
источник
Все ответы здесь, похоже, предлагают установить для параметра daylite значение false . Это неверно для многих часовых поясов, которые меняют сокращенные названия в зависимости от времени года (например, EST или EDT).
Приведенное ниже решение предоставит вам правильное сокращение в соответствии с текущей датой для часового пояса.
источник
TimeZone
Класс плохо разработаны и давно устарели.