Отмена перехода на Зимнее время на Украине. Правим timezone

2 октября 2011 г.

Не так давно на Украине был принят законопроект об отмене перехода на зимнее время. Хорошо это или плохо? Этот вопрос неоднократно обсуждался на просторах интернета. Действительно плохо может быть для UNIX систем, если официально не успеет выйти патч для tzdata. К счастью, решить эту проблему можно и собственными руками.

TimezoneКак известно, в 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

Всё! Теперь в вашей системе отключен автоматический переход на зимнее/летнее время.

Источники:

Теги: рубрика Linux
  • Похожие статьи
  • Предыдущие из рубрики