Смена временных зон в Mac OS X Snow Leopard

Введение


В связи с отменой перехода на летнее/зимнее время посвящается.

В Mac OS X настройки часовых поясов находятся в двух местах: /etc/localtime и /usr/share/icu/icudtXXX.dat.
/etc/localtime, который является сиволической ссылкой на /usr/share/zoneinfo/[установленная time zone, например Europe/Moscow], задает настройки временных зон для консоли.
Системные часы, приложения Mail и прочие берут настройки тайм-зон из /usr/share/icu/icudtXXX.dat.

30 октября 2011г. у меня случилось следующее: в Terminal'е и различных консольных утилитах время правильное(localtime был заранее обновлен), а в Mail, системных часах и прочем отстает на час.

Решение проблемы


Модификация /etc/localtime

  • Скачиваем актуальную версию tzdata(я использовал tzdata2011l.tar.gz, последнюю версию можно взять здесь).
  • Распаковываем (tar xzf ./tzdata2011l.tar.gz).
  • Применяем (sudo zic europe).
  • Проверяем (zdump -v /etc/localtime | grep 2011).

Должно получиться примерно так:
eth0-loth:~$ zdump -v /etc/localtime | grep 2011
/etc/localtime Sat Mar 26 22:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 MSK isdst=0
/etc/localtime Sat Mar 26 23:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 MSK isdst=0

Как видно — переход в марте указан, а октябрьский — исчез.

Модификация /usr/share/icu/icudtXXX.dat

У меня стоит Xcode, поэтому я компилировал файл прямо у себя.
  • Скачиваем исходники ICU (брать тут).
  • Распаковываем:
    tar xzf ICU-400.42.tar.gz
    cd ICU-400.42/icuSources
  • Копируем актуальную tzdata в исходники:
    cp ~/tzdata2011l.tar.gz ./tools/tzcode/
  • Cобираем и компилируем:
    ./runConfigureICU MacOSX --with-data-packaging=archive
    gmake
  • Делаем бэкап:
    cp /usr/share/icu/icudt40l.dat ~
  • Устанавливаем файл:
    sudo install -o root -g wheel -m 0644 -Sp data/out/icudt40l.dat /usr/share/icu/icudt40l.dat
  • Для окончательного применения, перезагружаемся.


Заключение


Все вышенаписанное проверялось на Mac OS X Snow Leopard 10.6.8. В результате имеем правильную тайм зону (Europe/Moscow), включенную синхронизацию ntp и правильное время во всех приложениях.

P.S. Cтоит отметить, что при попытке собрать более позднюю версию icu(icudt46l) система работала нестабильно.

P.P.S. Спасибо gag_fenix за инвайт!

UPD: Скомпилированный файл icudt40l.dat (здесь) и файл зоны Moscow(здесь).
Share post

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 13

    –5
    Извините, конечно, но в чем проблема? неужели нельзя просто зайти в настройки часов в самой системе и там выставить нужное время? зачем правки файлов и так далее? часто сейчас такие темы появляются. и касательно разных дистрибутивов линукса, вот касательно мака вылезла. зачем?
      +4
      При включенной ntp синхронизации времени и устаревшей временной зоне неправильно отображается время, что доставляет некоторые неудобства. Вручную время поставить можно, только при этом придется отказаться от синхронизации часов с ntp, либо указать другую тайм зону(например Арабских эмиратов). Лично я считаю, что лучше фиксить причину, а не следствие. В данном случае Apple не выпустила необходимый апдейт, что сподвигло написать меня данную заметку.
        0
        я понял Вас. спасибо.
      0
      Хмм, сейчас столкнулся с проблемой синхронизации тайм зон в календаре. Если выставить вручную время, то календарь лажает со временем миитингов с буржуями. Неужто нет проще решения чем копаться внутрях?
        +1
        Проще — сменить часовой пояс на Дубай (ОАЭ). У них GMT+4 без DST
          0
          Можно все обновления установить из пакета: www.mediafire.com/?7acybry2jw5743j
          Обновление самомальное, так-что as-is.
          –1
          Сегодня был диалог с другом:
            –1
            ой.

            В общем, его забанили на support.apple.com за то что он обругал apple за нерасторопность в выпуске заплат и посоветовал брать пример с microsoft.
            0
            Спасибо за рецепт! Я сначала писал в Эппл, потом плюнул и скомпилил таймзоны сам, а затем битых два часа гуглил как добиться правильной работы в iCal и Date/Time Preferences. Нашел как в Аргентине страдали от такого же в 2007-м, а потом и эту статью на Хабре. Еще же проблема в том, что time zone database, на которую все ссылаются в интернетах, закрыли месяц назад при странных обстоятельствах.

            Если возможно, выложите ваш /usr/share/icu/icudt40l.dat и /usr/share/zoneinfo/Europe/Moscow куда-нибудь, может быть большинству пользователей для простоты достаточно всего лишь заменить эти два файла (последний-то точно, а вот icudt40l.dat может различаться, наверное). На всякий случай, чтобы сравнить: у меня Mac OS X Snow Leopard 10.6.7, при компиляции я использовал tzdata2011m, сумма получается MD5 (/usr/share/icu/icudt40l.dat) = d49593c8fc6a01412a761108814dbcc0
              +1
              Time Zone Database временно переехал на www.iana.org/time-zones. Файлы выложил, ссылки в конце статьи. Рад, что хоть кому-нибудь пригодилось.
                +1
                Скомпилировал у себя с tzdata2011m, MD5 совпадает (MD5 (./icudt40l.dat) = d49593c8fc6a01412a761108814dbcc0).
                Так что простая замена должна помочь.
                0
                Ссылки умерли, перевыложите пожалуйста.

              Only users with full accounts can post comments. Log in, please.