Введение
В связи с отменой перехода на летнее/зимнее время посвящается.
В 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(здесь).