Как получить смещение часовой пояс в GMT (как GMT + 7: 00) с устройства Android?

Я получаю timezone устройства Android, используя этот код

 TimeZone tz = TimeZone.getDefault(); String current_Time_Zone = (TimeZone.getTimeZone(tz.getID()).getDisplayName( false, TimeZone.SHORT)) 

Но он всегда возвращает мне timezone как « IST », но я хочу получить часовой пояс в GMT как этот GMT+7:00.

Это может дать вам представление о том, как реализовать его по своему усмотрению:

 Calendar mCalendar = new GregorianCalendar(); TimeZone mTimeZone = mCalendar.getTimeZone(); int mGMTOffset = mTimeZone.getRawOffset(); System.out.printf("GMT offset is %s hours", TimeUnit.HOURS.convert(mGMTOffset, TimeUnit.MILLISECONDS)); 

(TimeUnit – «java.util.concurrent.TimeUnit»)

Этот код возвращает мне смещение GMT.

 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault()); Date currentLocalTime = calendar.getTime(); DateFormat date = new SimpleDateFormat("Z"); String localTime = date.format(currentLocalTime); 

Он возвращает смещение часового пояса следующим образом: +0530

Если мы используем SimpleDateFormat ниже

 DateFormat date = new SimpleDateFormat("z",Locale.getDefault()); String localTime = date.format(currentLocalTime); 

Он возвращает смещение часового пояса следующим образом: GMT + 05: 30

Вот решение, чтобы получить смещение часового пояса в GMT + 05: 30 в этом формате

 public String getCurrentTimezoneOffset() { TimeZone tz = TimeZone.getDefault(); Calendar cal = GregorianCalendar.getInstance(tz); int offsetInMillis = tz.getOffset(cal.getTimeInMillis()); String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60)); offset = "GMT"+(offsetInMillis >= 0 ? "+" : "-") + offset; return offset; } 
 public static String timeZone() { Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault()); String timeZone = new SimpleDateFormat("Z").format(calendar.getTime()); return timeZone.substring(0, 3) + ":"+ timeZone.substring(3, 5); } 

возвращается как +03: 30

однострочное решение должно использовать символ Z например:

 new SimpleDateFormat(pattern, Locale.getDefault()).format(System.currentTimeMillis()); 

где pattern может быть:

  • Z / ZZ / ZZZ: -0800
  • ZZZZ: GMT-08: 00
  • ZZZZZ: -08: 00

полная ссылка здесь:

http://developer.android.com/reference/java/text/SimpleDateFormat.html

 public static String getCurrentTimezoneOffset() { TimeZone tz = TimeZone.getDefault(); Calendar cal = GregorianCalendar.getInstance(tz); int offsetInMillis = tz.getOffset(cal.getTimeInMillis()); String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60)); offset = (offsetInMillis >= 0 ? "+" : "-") + offset; return offset; } 
  TimeZone tz = TimeZone.getDefault(); Calendar cal = GregorianCalendar.getInstance(tz); int offsetInMillis = tz.getOffset(cal.getTimeInMillis()); String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60)); offset = (offsetInMillis >= 0 ? "+" : "-") + offset; 

Еще одно решение для получения смещения по часовой стрелке:

 TimeZone tz = TimeZone.getDefault(); String current_Time_Zone = getGmtOffsetString(tz.getRawOffset()); public static String getGmtOffsetString(int offsetMillis) { int offsetMinutes = offsetMillis / 60000; char sign = '+'; if (offsetMinutes < 0) { sign = '-'; offsetMinutes = -offsetMinutes; } return String.format("GMT%c%02d:%02d", sign, offsetMinutes/60, offsetMinutes % 60); } 

Если кто-то смотрит, как представлять GMT как число с плавающей точкой, представляющее смещение часа
(например, «GMT-0530» -5,5), вы можете использовать это:

 Calendar calendar = new GregorianCalendar(); TimeZone timeZone = calendar.getTimeZone(); int offset = timeZone.getRawOffset(); long hours = TimeUnit.MILLISECONDS.toHours(offset); float minutes = (float)TimeUnit.MILLISECONDS.toMinutes(offset - TimeUnit.HOURS.toMillis(hours)) / MINUTES_IN_HOUR; float gmt = hours + minutes; 

Вы можете сделать так:

  TimeZone tz = TimeZone.getDefault(); int offset = tz.getRawOffset(); String timeZone = String.format("%s%02d%02d", offset >= 0 ? "+" : "-", offset / 3600000, (offset / 60000) % 60); 
 TimeZone timeZone = TimeZone.getDefault(); String timeZoneInGMTFormat = timeZone.getDisplayName(false,TimeZone.SHORT); 

Выход: GMT + 5: 30

 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); 

Посмотрите, поможет ли это 🙂

Я тоже смотрел на это и пытался выяснить, как применять часовой пояс и DST. Вот мой код.

  public long applyGMTOffsetDST(long time) { // Works out adjustments for timezone and daylight saving time Calendar mCalendar = new GregorianCalendar(); TimeZone mTimeZone = mCalendar.getTimeZone(); boolean dstBool = mTimeZone.getDefault().inDaylightTime( new Date() ); // add an hour if DST active if (dstBool == true) { time = time + secondsPerHour; } // add offest hours int mGMTOffset = mTimeZone.getRawOffset(); if (mGMTOffset > 0) { long offsetSeconds = secondsPerHour * mGMTOffset; time = time + offsetSeconds; } return time; } 

Это похоже на работу, но есть ли лучший способ получить фактическое время с устройства, которое представляет собой время, которое имеет смысл и точный для пользователя?

Я наткнулся на простое решение для этого в Java8 (не Android), используя class ZoneDateTime . Могут быть и другие classы, которые работают с интерфейсом TemporalAccessor , но я их не нашел. Насколько мне LocalDateTime , это не будет работать со стандартными classами Date , DateTime , LocalDateTime и Calender .

  ZoneOffset myOffset = ZonedDateTime.now().getOffset(); ZoneOffset myOffset2 = ZoneOffset.from(ZonedDateTime.now()); log.info("ZoneOffset is " + myOffset.getId()); // should print "+HH:MM" log.info("ZoneOffset2 is " + myOffset2.getId()); // should print "+HH:MM" 

Самое приятное в этом решении заключается в том, что он избегает много модульной математики, генерации строк и синтаксического анализа.

Добавление смещения dst позволит решить следующее:

  int offsetInMillis = TimeZone.getDefault().getRawOffset()+TimeZone.getDefault().getDSTSavings(); String offset = String.format("%02d:%02d", Math.abs(offsetInMillis / 3600000), Math.abs((offsetInMillis / 60000) % 60)); offset = (offsetInMillis >= 0 ? "+" : "-") + offset; return offset; 

TimeZone timeZone = TimeZone.getTimeZone («GMT + 7: 00»);

объявите это явно.

  • .NET DateTime.Now возвращает неправильное время, когда изменяется часовой пояс
  • Как конвертировать дату с одного часового пояса в другой часовой пояс
  • Как получить текущий часовой пояс MySQL?
  • Преобразование дат UTC в другие часовые пояса
  • Веб-сервис - текущий часовой пояс для города?
  • Как получить текущую дату и время вашего часового пояса в Java?
  • .NET TimeZoneInfo из часового пояса Олсона
  • Получить имя часового пояса
  • Как элегантно работать с часовыми поясами
  • Могу ли я получить часовой пояс браузера в ASP.NET или мне нужно полагаться на операции JS для извлечения информации?
  • Как правильно установить JVM TimeZone
  • Interesting Posts

    Bmp to jpg / png в C #

    Есть ли стандарт для хранения нормализованных номеров телефонов в базе данных?

    Как я могу получить этот хороший индикатор строки в Outlook 2010 при ответе на электронные письма?

    Лучший способ отслеживания и итерации вкладок и окон с помощью WindowHandles с использованием Selenium

    Aquamacs: как переделать Capslock в Meta Key на уровне приложения?

    Ссылка на встроенные функции SSE

    Как каталогизировать файлы на нескольких внешних жестких дисках, которые я хочу хранить в автономном режиме?

    Почему не рекомендуется использовать attach () в R, и что я должен использовать вместо этого?

    Получить общий метод без использования GetMethods

    Частый BSOD "THREAD_STUCK_IN_DEVICE_DRIVER"

    Как захватить событие щелчка кнопки закрытия JFrame?

    Приложение SelfControl для Mac OS X не будет сброшено

    Когда использовать утверждение и когда использовать исключение

    Как перенаправить на другую веб-страницу?

    Как вы добавляете псевдо classы в элементы с помощью jQuery?

    Давайте будем гением компьютера.