Получить часовой пояс в GMT с устройств Android - PullRequest
0 голосов
/ 04 июня 2018

Вопрос кажется довольно простым, но я бы очень признателен за помощь.Поиск в Интернете много раз.

Ниже приведен код для получения текущего часового пояса устройств Android в GMT:

Java.Util.Calendar mCalendar = new Java.Util.GregorianCalendar();
Java.Util.TimeZone mTimeZone = mCalendar.TimeZone;
int mGMTOffset = mTimeZone.RawOffset + (mTimeZone.InDaylightTime(new Java.Util.Date()) ? mTimeZone.DSTSavings : 0);

string timeDiff = Java.Util.Concurrent.TimeUnit.Hours.Convert(mGMTOffset, Java.Util.Concurrent.TimeUnit.Milliseconds).ToString();

Выходы:

Если мобильное время GMT-03: 00, тоtimeDiff = -3

Если мобильное время GMT + 00: 00, то timeDiff = 0

Если мобильное время GMT + 05: 00, тогда timeDiff = 5

If Mobileвремя GMT + 05: 45 Тогда timeDiff = 5 (In Correct)

Проблема возникает, когда GMT в десятичных значениях, таких как 5:45, показывает 5.

Что мне делать вэти типы сценариев?

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

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

java.time

    ZoneOffset currentOffset = OffsetDateTime.now(ZoneId.systemDefault()).getOffset();
    System.out.println("Current offset is GMT" + currentOffset);

Запуск вышеуказанного фрагмента сегодня в часовом поясе Европы / Копенгагена дал:

Текущее смещение: GMT + 02: 00

Дания в +01: 00 в стандартное время и +02: 00 в летнее время (летнее время).В настоящее время мы используем летнее время, поэтому выходные данные соответствуют ожиданиям и учитывают летнее время.

Не зная Xamarin, я даю вам код Java и доверяю вам конвертировать.

Если вместо этогоЯ установил в качестве часового пояса для своей JVM Азию / Катманду. Получено смещение, о котором вы просили:

Текущее смещение: GMT + 05: 45

Ссылка: Обучающее руководство по Oracle: Дата и время , объясняющее, как использовать java.time.

0 голосов
/ 04 июня 2018

Используя GregorianCalender вы можете получить часовой пояс, пожалуйста, проверьте ниже код

 Calendar mCalendar = new GregorianCalendar();
 TimeZone mTimeZone = mCalendar.getTimeZone();
 int mGMTOffset = mTimeZone.getRawOffset();

 double sZone = (double) (TimeUnit.MINUTES.convert(mGMTOffset,TimeUnit.MILLISECONDS));
string timeDiff = sZone / 60;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...