MCP

воскресенье, 19 октября 2014 г.

Android. Часовые пояса. 2014 год.

UPD: Дальнейший анализ показал, что на некоторых телефонах возможно чуть более простое обновление файлов, не перепрошивкой, а просто любым системным приложением. К сожалению, обновляют таким образом очень мало производителей (Samsung, и, местами, HTC), что оставляет пост в силе.

Заканчивается 2014-ый год, в России опять переводят время, все телефоны опять начнут страдать фигнёй и путаться в показаниях.Меня удивляет, что несмотря на многочисленные пинки и тычки (а часовые пояса постоянно кто-то меняет, недавно, например, хорошо отличились Чили и Египет), в Андроиде не только не хотят подумать над автоматическом обновлением часовых поясов, даже не хотят нормально решить проблему их установки в новых прошивках. Например, у меня сейчас телефон с прошивкой недельной давности, в котором стоят зоны от 2013 года!

Немного технической информации для понимания механизма: практически во всём мире (кроме Microsoft, конечно же), информация о часовых поясов берётся из полуофициальной базы TZ Database. Я говорю полуофициальной, потому что, несмотря на контролирование этого файла IANA, по факту изменения в него вносятся обычными людьми. Т.е. я узнал, что в России будут новые часовые пояса, написал письмо и файл обновили. Никакого официоза (конечно, я надеюсь, что эту информацию хотя бы проверяют по новостям).

Эта база имеет формат ГодБуква, где год — это год обновления базы, а буква — порядковый номер обновления. На данный момент это 2014h, следующая будет 2014i или 2015a, в зависимости от того, когда выйдет.

База представляет собой набор текстовых файлов определённого формата, которые под *nix компилируются в специальные бинарные файлы с правилами. Текущая зона вешается симлинком на один из этих файлов. Например, на Europe/Moscow.
В других системах, эта база может иметь другой вид. Например, на андроиде до версии 4.3, это было 3 файла, но с версии 4.3 — стал уже один. Значит зачем-то программисты подбирались к этому коду, но совершенно не подумали о том, что он может устареть.

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

Конечно, если у вас есть рутовые права на телефоне, вы можете воспользоваться программой TimeZone Fixer, которая делает ровно одну вещь: копирует 3 файла в нужную папку. Эти 3 файла решают все проблемы. Но к сожалению, программе нужен рут, что не у многих есть. Вот так приходится работать за ленивых гугловских программистов, которым гораздо веселее в 7-й раз перерисовать иконки, чем сделать что-то полезное для людей. 

6 комментариев:

  1. Написал бы сразу что и где меняешь.
    И странная бага есть - в свойствах звонка (call details) время неверно показывает, на час вперед.
    При этом в системе время верное, зона московская, галки автокоррекции убраны.
    Прошивка CyanogenMod 11, Android 4.4.2.
    Если выбрать Минск, то всё верно становится.

    ОтветитьУдалить
    Ответы
    1. TimeZone Fixer сделает всё само, что можно.
      По поводу сдвига на час - грабли в ICU (причём грабли были всегда, а вылезли только в 4.4), додетализирую проблему, напишу пост.

      Удалить
    2. Возможно стоит намекнуть гуглу о востребованности автообновления тут:
      https://code.google.com/p/android/issues/detail?id=35730

      Запрос существует аж с 2012 года, и всего 17 звездочек

      Удалить
  2. Проблема не единичная:
    https://play.google.com/store/apps/details?id=com.force.timezonefixer&reviewId=Z3A6QU9xcFRPR25HLVFScm1JNGhlaDJraUxSWlJuUndKbHF0SlA0S01NcXZJdHJrX1lfU1JoY2x6TVhSZWEyckNrbThmeXdzQTV0M3pCN3A1bXc3cm9iQmY4

    ОтветитьУдалить
  3. Похоже что календарь, смс, ватсап - тоже подвержены проблеме.
    На плеймаркете полно коментов с проблемами.

    ОтветитьУдалить