Отмена перехода на Зимнее время на Украине. Правим timezone
Не так давно на Украине был принят законопроект об отмене перехода на зимнее время. Хорошо это или плохо? Этот вопрос неоднократно обсуждался на просторах интернета. Действительно плохо может быть для UNIX систем, если официально не успеет выйти патч для tzdata. К счастью, решить эту проблему можно и собственными руками.
Как известно, в UNIX системах параметры временных зон хранятся в унифицированном бинарном формате, тем самым возможность внесения изменений вручную отсутствует. Для проверки состояния параметров DST на вашей системе достаточно выполнить команду:
zdump -v /etc/localtime
Если ваша временная зона соответствует одной из установленных на Украине, то вывод будет примерно следующий:
/etc/localtime Sun Mar 27 00:59:59 2011 UTC = Sun Mar 27 02:59:59 2011 EET isdst=0 gmtoff=7200
/etc/localtime Sun Mar 27 01:00:00 2011 UTC = Sun Mar 27 04:00:00 2011 EEST isdst=1 gmtoff=10800
/etc/localtime Sun Oct 30 00:59:59 2011 UTC = Sun Oct 30 03:59:59 2011 EEST isdst=1 gmtoff=10800
/etc/localtime Sun Oct 30 01:00:00 2011 UTC = Sun Oct 30 03:00:00 2011 EET isdst=0 gmtoff=7200
Тем самым, 30 октября часы в вашей системе автоматически перескочат на час назад, возможно создав при этом массу неприятностей.
Где же решение?
Как ни странно, решение проблемы не совсем тривиально, но и не слишком уж усложнено.
Далее я опишу подробную инструкцию для Debian-like систем. Для всех остальных действия выполняются по аналогии.
mkdir -p /tmp/tzdata cd /tmp/tzdata apt-get source tzdata tar xfz tzdata-2011h.orig.tar.gz cd tzdata-2011h/
Далее любым текстовым редактором необходимо произвести необходимые нам изменения, в качестве примера я приведу зону для Киева:
Zone Europe/Kiev 2:02:04 - LMT 1880
2:02:04 - KMT 1924 May 2 # Kiev Mean Time
2:00 - EET 1930 Jun 21
3:00 - MSK 1941 Sep 20
1:00 C-Eur CE%sT 1943 Nov 6
3:00 Russia MSK/MSD 1990
3:00 - MSK 1990 Jul 1 2:00
2:00 - EET 1992
2:00 E-Eur EE%sT 1995
2:00 EU EE%sT 2011 March 27
3:00 - EEST
Сохраняем файл, далее:
mkdir new-tz zic -d new-tz europe
После компиляции в папке new-tz появятся все необходимые файлы зон. Для корректной работы и внесения изменений в вашей системе необходимо скопировать файл /new-tz/Europe/Kiev в /usr/share/zoneinfo, подтвердив замену:
cp /tmp/tzdata/new-tz/Europe/Kiev /usr/share/zoneinfo/Kiev
Произведем реконфигурацию пакета tzdata:
dpkg-reconfigure tzdata
Всё! Теперь в вашей системе отключен автоматический переход на зимнее/летнее время.
Источники: