Точное время в твоем мобильном. Приложение для синхронизации времени на андроид

Изменение даты и времени на телефоне и планшете под Андроид – простейшие операции. Но только для тех, кто хорошо освоил устройство и знает его, как свои пять пальцев. Тема вызвала у вас улыбку? Полноте, сударь: все мы были новичками, и то, что кажется вам элементарным, когда-то казалось непонятным и сложным.

Эта статья для тех, кто только готовится стать «Гуру смартфонов» и «Богом ОС Андроид», точнее – для начинающих. Итак, читайте, как поменять дату в Android, а также настроить на нем время и часовой пояс.


Как поменять дату и время в Android устройстве

Настройка времени и сегодняшнего числа средствами системы

Чтобы изменить параметры даты и времени, запустим средство управления настройками системы – приложение «Параметры ».

Перейдем в раздел «Дата и время ». Опции, которые нас интересуют, находятся здесь. А именно:

  • Автонастройка времени и числа.
  • Автонастройка часового пояса.
  • Установка даты вручную.
  • Ручной выбор часового пояса.

Если хотите, чтобы телефон сам установил текущее время и число, коснитесь верхней кнопки, показанной на скриншоте выше. Выберите один из двух способов синхронизации – по сети или посредством GPS.

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

Если данные отобразились неправильно, в настройках этого же раздела измените часовой пояс. Нажмите кнопку «Выбор часового пояса » и укажите регион, в котором находитесь сейчас.

Или активируйте «Автоматическую синхронизацию часового пояса по сети », как показано на скриншоте ниже.

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

После этого зайдите в раздел «Установка даты »:

И отметьте в календаре сегодняшнее число. Или любое другое. Для сохранения нажмите «Установить ».

Если нужно, проделайте эту же операцию со временем.

Что делать, если число сбивается, а системные часы спешат или отстают

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

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

Единственная сложность при его применении, это необходимость получения прав root (суперпользователя, имеющего доступ к защищенным системным файлам и функциям). Всё остальное очень просто – достаточно отключить синхронизацию в параметрах устройства (как это сделать, я рассказал выше) и включить в самой утилите.

Для этого:

  • Запустите ClockSync и коснитесь кнопки меню (три точки в верхнем правом углу). Выберите «Настройки ».

  • В разделе меню «Автоматическая синхронизация » отметьте «Включить ». Ниже можете задать временной интервал синхронизации, задействовать режим высокой точности, активировать опции экономии трафика и заряда батареи, включить автонастройку часовых поясов и т. д.
  • Если после этого программа показывает неточное время и число, перезагрузите гаджет (выключите и включите). Вот и все дела.

При использовании ClockSync старайтесь выключать телефон или планшет как можно реже и хотя бы раз в сутки подключать его к Интернету (чтобы не пропускать циклы синхронизации). Тогда показания утилиты будут максимально точны.

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

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.

Меняем дату и время вручную

Для корректировки времени и даты вручную, нужно войти в настройки устройства. Сделать это можно двумя путями:

  1. Вертикальным от строки состояния раздвинуть шторку и тапнуть на иконке, изображающую шестеренку.
  2. Войти в меню приложений, тапнув по иконке с изображением шести точек, расположенной в док-баре. Найти иконку с изображением шестеренки и коротким по ней открыть раздел «Настройки ».

Найдите внизу открывшегося списка пункт «Дата и время » и коротким касание по нему откройте данную вкладку. В некоторых гаджетах меню настроек может выглядеть иначе, а настройки времени и даты надо искать в разделе «Опции ».

Ручная настройка времени и даты будет доступна, если снята галочка с опции «Автоопределение времени » или «Дата и время сети » находится в положении выключено (в зависимости от версии Android).

  • Чтобы поменять дату, выбираем пункт “Дата » или «Установить дату », где выбираем число, месяц и год и подтверждаем тапом по кнопке «Ок».
  • Чтобы поменять время, нужно выбрать пункт «Время » или «Установка времени », где устанавливаем правильное время и подтверждаем тапом по кнопке «Ок». Здесь же можно установить формат времени – 12 часовой или 24 часовой.

Автоматическая установка даты и времени

Android может выстанавливать время и дату в автоматическом режиме. В этом режиме сведения синхронизируются из сети оператора. Естественно, сим карта должна быть установлена в устройство. Для автоматической установки времени и даты нужно установить галочку на пункте «Автоопределение времени ». Ручная установка при этом станет недоступна.

О том, что часы в мобильном отстают узнаешь, как правило, когда куда-то опоздал, примеру, на поезд. В XXI веке неприемлемо когда ваши часы спешат или отстают больше чем на минуту.

И если к наручным часам претензий нет, то смартфоны просто обязаны показывать точное время. Но как показывает практика — это не всегда так. Часы на телефонах такие же «брехучие» как и старые ходики у бабушки в деревне.

Чем определяется точность электронных часов

В первую очередь точностью настройки и стабильностью кварцевого генератора (резонатора). Точность и стабильность частоты последнего как правило составляет 10 -6 . В идеале при таком значении часы убегают чуть более 30 секунд в год.

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

Повышаем точность часов

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

Поэтому напрашивается сам собой способ взять за эталон частоту несущей внешнего источника сигнала. И использовать ее как опорную для нашего генератора. Возможны два пути: аппаратный и программный.

В первом случае частота генератора часов подстраивается под частоту несущей передающей вышки GSM. Во втором случае базовая вышка GSM передает сигналы точного времени и операционная система подстраивает часы.

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

Серверы точного времени

Так как смартфон это компьютер с доступом в интернет, то проще всего синхронизировать часы с эталонными серверами точного времени. В стандартных прошивках этой возможности нет. Но проблема решается установкой допольнительного ПО. Программ таких несколько, и мне приглянулась одна — ClockSync от «отечественного производителя»:-).

ClockSync синхронизирует системное время Android устройства через Интернет по протоколу NTP с серверами точного времени. Программа полезна если оператор сотовой связи не поддерживает NITZ (автоматическую синхронизацию времени) или посылает неверные значения, а также в случае, если часы телефона сильно убегают вперед или отстают.

Работает на планшетах. Актуально если нужно точное время. Тем более на устройствах без GSM модуля.

Вспомнил, что вместе с коллегой по работе уже давно решил эту проблему на 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) с, тогда еще доступного, ресурса