Проблемы времени и часовых поясов в Android и пути их решения. Как настроить или поменять дату и время на Android: установка вручную или автосинхронизация

Синхронизация времени на Андроид – вещь, безусловно, очень важная. Именно от точности часов мобильного устройства зачастую зависит наше восприятие окружающими. Ведь многие из нас давно уже отдали предпочтение гаджетам в плане определения текущего времени.

Поэтому, в сегодняшней статье мы будем учиться приходить вовремя на важные мероприятия, а поможет нам в этом приложение ClockSync.

Приложение для синхронизации времени на Android: Видео

Установка приложения ClockSync

Разработчики позиционируют свой продукт как программу совершенно бесплатную, но требующую для полноценной работы ROOT-доступ. ClockSync доступна для загрузки по адресу .

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

Получив указанные разрешения, ClockSync инсталлируется в память мобильного устройства и будет терпеливо ожидать дальнейших действий пользователя.

Синхронизация устройств на системе Android с ПК: Видео

Настройка приложения ClockSync

Итак, давайте запустим программу и проверим отклонение текущего времени на мобильном устройстве от времени на серверах синхронизации.

Как видите, отклонение есть, пусть и небольшое. Разница во времени указана в строке “Смещение”. Следовательно, часы гаджета надо немного подстроить. Но перед этим предлагаем вам ознакомиться с теми возможностями, которые предлагают нам разработчики ClockSync. С помощью контекстного меню открываем настройки приложения.

Прежде всего, мы советуем вам включить автоматическую синхронизацию времени, отметив галочкой соответствующий пункт. Обращаем ваше внимание на то, что пользователю дается право самостоятельно указывать сервер синхронизации. Но делать это стоит только в том случае, если вы абсолютно уверены в своих действиях.

Разработчики учли предыдущие пожелания интернет-сообщества и снабдили ClockSync возможностями записи выполненных операций – вы в любой момент можете просмотреть журнал работы программы в пункте “История и статистика”.

Двигаемся далее. Опция “Определять часовой пояс”. Это может пригодиться тем из вас, кто много путешествует. Зачем тратить личное время на корректировку часов при перелете из одной страны в другую? Пусть этим занимается “сообразительный” гаджет!

Как мы отмечали уже в начале статьи, ClockSync настоятельно просит у пользователя root-доступ, но приложение вполне неплохо справляется со своими обязанностями и без него. Достаточно лишь указать необходимый режим работы в настройках программы.

Ну, а в самом конце списка возможностей – чисто косметические пункты: стоит ли оповещать вас о том, что время синхронизировано или нет, стоит ли отключать экран устройства во время работы программы, в какую цветовую гамму окрасить приложение и так далее.

На этом краткий обзор настроек ClockSync мы и завершим. Пришло время синхронизировать наши мобильные часы. Переходим на основной экран программы и видим, что смещение по времени никуда не делось. Открываем вспомогательное меню и выбираем пункт “Синхронизировать”.

В виду того, что наше устройство “рутировано”, приложение запросит разрешение на получение неограниченного доступа к системным функциям. Разрешаем.

Вспомнил, что вместе с коллегой по работе уже давно решил эту проблему на Android (HTC Hero) и хотел написать в песочницу, но все откладывал на потом. А сегодня появилась очередная статья «Обновление временных зон на Android» практически похоронившая идею написания и, подтвердившая идею, что не надо откладывать важные вещи на потом. Но… немного повспоминав, я всё-таки решился, потому что в данных статьях рассматривалась проблемы связанные с переходом на зимнее/летнее время и совсем не затрагивался момент касающийся работы виджета часов с погодой и автоматического определения времени через оператора сотовой связи.

Все началось с того, что был приобретен новый телефон HTC Desire S.

В процессе настройки выяснилось, что в настройках даты и времени нет возможности выбрать мой город - Новосибирск и приходиться выбирать альтернативный город с подходящим часовым поясом.
Так же выяснилось, что синхронизация времени от оператора работает как-то загадочно и виджет HTC Clock в режиме отображения погоды и включенной автоматической синхронизацией отображает некорректное время.

На картинке может показаться, что всё в порядке, однако время на самом деле на телефоне убежало на час назад. Можно отключить автоматическое определение и выставит зону руками, но тогда получим следующее:

Как видно, Новосибирск в списке отсутствует. Нам пришлось выбрать Bangkok, при этом системное время в телефоне стало правильным, но виджет отображает по-прежнему со смещением на час назад.

Попробовали найти решение в сети. Обнаружили что мы не одиноки, причем подобные проблемы существуют не только у жителей Новосибирска, но и у жителей других городов планеты. Комплексного решения всех указанных проблем мы не обнаружили.

Можно было на все это забить, отключить, выставлять руками и не обращать внимания на виджет, но… это же Android - а это значит, что мы можем и должны его победить!

И так, мы начинаем
Новый телефон был на тот момент не рутованый и сделать его таковым не представлялось возможным. Поэтому для экспериментов был взят HTC Hero с оригинальной прошивкой + root/busybox/apps2sd, на котором были точно такие же проблемы.

Нашли через osmonitor приложение, в котором выбирается часовой пояс - (com.android.settings). Посмотрели исходники пакета com.android.settings и выяснили, что ресурсы загружаются из XML файла timezones.xml .

Достали apk этого приложения /system/app/Settings.apk следующей командой:
adb pull /system/app/Settings.apk

Не стану описывать все подробности работы APK manager и Android SDK tools, думаю, заинтересованные люди легко разберутся. Остановлюсь только на ключевых моментах.

С помощью APK manager произвели следующие действия

  • decompile
  • ручками в другом окне отредактировали файлы
  • compile. При компиляции APK manager задает вопросы:
    «Is this a system apk (y/n)» – отвечаем yes
    «Aside from the signatures, would you like to copy over any additional files that you didn"t modify from the original apk in order to ensure least # of errors (y/n)» -тоже отвечаем yes.
    Далее действуем по предложенной APK manager-ом инструкции, в другом окне удаляем из директории keep файлы, которые мы изменили + resources.arsc.
  • Завершаем сборку.
Мы сделали изменения для своего города, по аналогии жители других городов тоже смогут попробовать устранить данную проблему на своих телефонах.

Получившийся apk поместили обратно в телефон:
adb push Settings.apk /system/app/

Этим мы добились того что в списке ручного выбора временной зоны появился Novosibirsk.

Наш город появился в списке, но определение временной зоны в автоматическом режиме по-прежнему работало неверно. Для этого мы пошли дальше и выяснили что, настройки временных зон для городов хранятся в базе данных, а именно в файле /system/etc/WPDB.zip.
Достав его из телефона с помощью всё того же adb, мы извлекли из него две базы

  • WP_0409WWE.db
  • WP_0419RUS.db
для английского и русского языков соответственно. Посмотрев на данные, мы обнаружили, что для нашего города, временная зона прописана как Asia/Almaty, пришлось поправить и этот момент, для этого в базах поменяли timezoneId на Asia/Novosibirsk (использовали Lita в качестве редактора SQLite database):
update locationlist set timezoneId = "Asia/Novosibirsk" where name = "Novosibirsk" -- (для WP_0409WWE.db) update locationlist set timezoneId = "Asia/Novosibirsk" where name = "Новосибирск" -- (для WP_0419RUS.db)
Кроме того, еще в одну базу добавили запись о нашем городе, а именно в /system/etc/timezones.db
Добавили запись, timezoneId: Asia/Novosibirsk, остальные поля Novosibirsk, ru – Новосибирск.

Для того чтобы все сделанные изменения вступили в силу, сбросили кэш для приложений
Clock, Settings и Weather Provider. Ну и для полной уверенности перезапустили телефон.

Итоги

В результате получили вот такие пироги:

Как мы видим, в автоматическом режиме зона определяется корректно, системное время и время на виджете одинаковое, ну и в ручном режиме все в порядке.

Ввязавшись в войну со временем, мы решили идти до конца. А именно решить и проблему отмены перехода на зимнее/летнее время.
Скачали самую свежую tzdata (aka timeinfo.dat) с, тогда еще доступного, ресурса

12 августа 2014 в 17:07

Проблемы времени и часовых поясов в Android и пути их решения

  • Системное администрирование
  • Tutorial

Предположим, вы уже давно используете Android, а потому может показаться, что он прекрасно справляется с задачами синхронизации времени – будильники срабатывают вовремя, каких-то явных отклонений времени не наблюдается и т. д. Однако уверены ли вы полностью в том, откуда Android на самом деле получает данные о точном времени и часовых поясах? Если у вас есть хоть какие-то сомнения о том, как это работает - добро пожаловать под кат.


В Android существует две проблемы со временем: это его непредсказуемая синхронизация и необходимость в актуализации данных о часовых поясах даже в самой свежей версии ОС.

Предыстория: Android является мобильной ОС, базирующейся на ядре Linux, он спокойно подключается к интернету и, конечно же, можно предположить, что синхронизация времени осуществляется с помощью NTP , однако, это не так. Исторически сложилось, что Android был предназначен для использования исключительно в мобильных телефонах (вспомните версию 1.6). При этом только к 3 мажорной версии он обзавёлся интерфейсом для планшетов и начали́сь другие подвижки к унификации интерфейса и начинки ОС. Однако даже версии 4.4 и Android L получают сигналы точного времени теми же методами, что их получала Nokia 3310 и другие, более ранние GSM/3GPP телефоны, т. е. от вышек сотовой связи при регистрации в сети (при подключении к вышке). При этом планшеты или другие устройства без модуля связи, в принципе не имеют возможности синхронизировать время автоматически.

К великому сожалению, чтобы научить Android синхронизировать время полностью автоматически с помощью NTP нам понадобиться root доступ ибо API для точной установки времени в Android ныне отсутствует.

Приступим. Первое, что необходимо сделать, это выключить синхронизацию времени с мобильной сетью. При этом установку часового пояса я рекомендую оставить в автоматическом режиме, а отключать её стоит, только если есть гарантия, что устройство будет работать в стационарном режиме.

Скриншот окна настроек «Настройки -> Дата и время» версии Android 4.x:

Далее, необходимо установить приложение ClockSync , которое и будет выступать для нас альтернативой демону синхронизации времени с помощью NTP.

Скриншоты окна программы ClockSync до синхронизации (слева) и после (справа):

На скриншотах видно, что разница с точным временем оказалась достаточно маленькой, однако, бывают разные ситуации, у некоторых время на устройстве может даже плавать туда-сюда поскольку оператор не удосужился навести порядок у себя на БС.

Убедившись, что всё работает, настроим автоматическую синхронизацию в программе ClockSync. Для повышения точности я рекомендую включить опции «Режим высокой точности» и «Только через WI-FI». Если с первой опцией всё понятно из описания в программе (см. скриншот ниже), то вторую опцию я рекомендую включить в первую очередь не из соображений экономии мобильного трафика, а из-за того, что мобильный интернет не способен гарантировать хоть сколько-нибудь стабильные задержки.

Немного подробнее о точности:

Всё ещё распространённый мобильный интернет 2-го (GPRS/EDGE) в принципе не в состоянии обеспечить стабильные задержки при передаче. Даже интернет 3-го (3G) и, в некоторой мере, 4-го (LTE/LTE-advanced) поколений при сильной загрузке сети или каналов связи между БС, что является типичной ситуацией для крупных населённых пунктов, не может гарантировать стабильные задержки. Поэтому даже с аппроксимацией конечная точность установки времени может быть хуже долей секунд и даже легко достигать нескольких секунд.

Скриншот настроек автоматической синхронизации в ClockSync:

В связи с масштабными изменениями часовых поясов в РФ осенью этого года необходимо уже сейчас задуматься об актуализации информации о них на всех устройствах и если с поддерживаемыми настольными ОС проблем не возникает, то в Android даже самая свежая версия ОС содержит устаревшие данные. Для того чтобы в этом убедиться устанавливаем TimeZone Fixer и наблюдаем неприглядную картину.

Скриншот программы TimeZone Fixer, запущенной на Android 4.4.4 (прошивка Cyanogenmod от 4 августа 2014), на котором хорошо видно, что данные в прошивке неактуальные:

Немножечко здравого беспокойства и заботы о пользователях:

Автор программы TimeZone Fixer предупреждает нас, что обновление файлов данных о часовых поясах может полностью «сломать» устройство и даже даёт рекомендации о том как обезопасить себя от дополнительных проблем, хоть случаи проблем единичные и очень специфичные - это действительно хорошая забота о простых пользователях.

Только поэтому я и внёс этот кусочек в статью, он хоть и не имеет непосредственного отношения к проблеме, но это действительно хороший пример заботы о пользователях. В то же время предупреждение насчёт версий 4.3+ вызвано лишь малым количеством отзывов о программе для устройств с новыми версиями ОС, поэтому, пожалуйста, после использования обязательно напишите о́тзыв об этом приложении.


После обновления данных о часовых поясах программа предло́жит перезагрузится, однако, я рекомендую перезагрузить устройство самостоятельно через системное меню поскольку программа осуществляет перезагрузку фактически эквивалентную reset, что, пусть и с малой вероятностью, но может привести к проблемам и потери данных.

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

UPD: Эта инструкция полностью решает проблему часовых поясов только для версий младше 4.4 . С версии 4.4 нужен дополнительный патчинг, пока вопрос находится на стадии исследования возможностей для создания юзер-френдли решения.

В наше время всё больше людей отходят от использования наручных часов, предпочитая им часы смартфона. Однако телефонные дата и время могут сбиться при перезагрузке устройства или из-за ошибки системы. В таких случаях приходится менять настройки самостоятельно. Чтобы сделать это правильно, рассмотрим некоторые особенности настроек даты и времени на Android.

Неточные дата и время на Android могут привести к прекращению или некорректной работе некоторых приложений . Это происходит из-за того, что программы автоматически сверяют дату окончания своей лицензии с датой, установленной на телефоне. И если что-то не сходится, то они просто перестают работать.

Как изменить дату и время на Android

Теперь перейдём к ручной настройке параметров времени.

Видео: как установить время и дату на Android

Возможные проблемы при настройке времени и их решения

После установки новых параметров времени вы можете столкнуться с двумя проблемами:

  • настройки времени постоянно сбрасываются;
  • на экране устройства появилась запись «В приложении Настройки произошла ошибка».

Исправить эти недоразумения вам помогут следующие способы.

Перезагрузка

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

Автосинхронизация

Если перезагрузка устройства не сработала должным образом, нужно включить автосинхронизацию. Эта функция позволяет телефону самостоятельно обновлять настройки времени при подключении к интернету. Чтобы включить автосинхронизацию, выполните следующие шаги.

Установка приложений 360root и ClockSync

Если в вашем телефоне отсутствует функция автосинхронизации, нужно будет проделать следующие шаги.


Сброс настроек до заводских

Однако и после включения автоматической синхронизации время всё равно может самостоятельно меняться или выдавать ошибку. В этом случае придётся выполнить сброс настроек телефона до заводских.

Как выбрать, настроить или добавить новый часовой пояс

Чтобы узнать часовой пояс своего региона, зайдите на сайт http://www.gmt.su/city-time/country/Россия/ и найдите в списке ближайший к вам город. Справа страницы вы увидите данные о часовом поясе. Например, в Калининграде это GMT +02:00. Эту информацию вам и нужно будет выбрать в настройках своего телефона.



Статьи по теме