Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Android Как получить время, отображаемое в StatusBar

#java #android #время #calendar #timezone


Здравствуйте! 

Некоторые пользователи при переходе на постоянное зимнее время отключили синхронизацию
времени и часового пояса по сети и вручную перевели время на час назад. 

Сейчас у них на телефонах, к примеру, установлен часовой пояс, в котором 14:00, а
на телефоне отображается текущее время 13:00. 

При получении времени методами 

System.currentTimeMillis(), Calendar.getInstance().getTimeInMillis()


возвращает 14:00. Как получить время пользователя правильно?
    


Ответы

Ответ 1



Всё, что я смог найти, сведено вот в этот пост. Резюме: без использования дополнительных запросов к серверу и/или получения собственных координат (которые не всегда могут быть доступны), невозможно получить необходимую разницу во времени. Это же относится и к отменённому летнему времени: часть устройств всё ещё считает, что летом часовой пояс Москвы GMT+4, часть - уже знает, что GMT+3. И кроме запроса на сервер в общем случае никаким образом их не синхронизировать.

Ответ 2



Нет возможности проверить, но думаю нужно получить таймзону и посчитать с ней? TimeZone tz = TimeZone.getDefault(); или попробовать другой способы: Time now = new Time(); now.setToNow(); http://developer.android.com/reference/android/text/format/Time.html

Ответ 3



Calendar.getInstance().getTimeInMillis() возвращает количество миллисекунд в часовом поясе UTC. Как вы проверяете что это соответвует 14:00? Может быть, пользователь не переводил время, а поставил себе соседний часовой пояс? В любом случае попробуйте проверить какой час возвращается если использовать Calendar.getInstance().get(Calendar.HOUR_OF_DAY)

Комментариев нет:

Отправить комментарий