Как самому создать новую TIMEZONE в solaris?
05.10.2011
Итак, помним о том что TIMEZONE — это только переменная среды и относится к локальному времени в текущей сессии. Время самого сервера идет в UTC и можно установить в текущей сессии время Australia/Sydney а в другой сессии Europe/Moscow.
Например:
# date
Wed Oct 5 16:38:33 MSD 2011
# export TZ=Asia/Phnom_Penh
# date
Wed Oct 5 19:38:39 ICT 2011
Все TIMEZONE описываются достаточно простыми правилами и легко могут быть исправлены и перекомпилированы. Т.к. для Беларуси еще нет нового патча TIMEZONE, то попробуем исправить эту ситуацию (эээ, ну все делается только на свой страх и риск, я ни за какие последствия не отвечаю :)
Проверяем, что проблема еще существует:
# zdump -v Europe/Minsk |grep 2011
Europe/Minsk Wed Oct 5 12:25:27 2011 UTC = Wed Oct 5 15:25:27 2011 EEST isdst=1
Europe/Minsk Sat Mar 26 23:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 EET isdst=0
Europe/Minsk Sun Mar 27 00:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 EEST isdst=1
Europe/Minsk Sat Oct 29 23:59:59 2011 UTC = Sun Oct 30 02:59:59 2011 EEST isdst=1
Europe/Minsk Sun Oct 30 00:00:00 2011 UTC = Sun Oct 30 02:00:00 2011 EET isdst=0
Переходим в каталог, где лежат все исходники TZ:
cd /usr/share/lib/zoneinfo/src
Смотрим на файлик europe, ищем там зону Europe/Minsk:
# Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Minsk 1:50:16 - LMT 1880 1:50 - MMT 1924 May 2 # Minsk Mean Time 2:00 - EET 1930 Jun 21 3:00 - MSK 1941 Jun 28 1:00 C-Eur CE%sT 1944 Jul 3 3:00 Russia MSK/MSD 1990 3:00 - MSK 1991 Mar 31 2:00s 2:00 1:00 EEST 1991 Sep 29 2:00s 2:00 - EET 1992 Mar 29 0:00s 2:00 1:00 EEST 1992 Sep 27 0:00s 2:00 Russia EE%sT
Так, получается, что наша зона зависит от правил (RULES) Russia и C-Eur. Копируем эти правила в новый файлик.
cat europe |grep Rule |grep C-Eur |grep -v ^# >>europe.minsk.2011
cat europe |grep Rule |grep Russia |grep -v ^# >>europe.minsk.2011
Исправляем информацию о переходе на летнее-зимнее время в правилах Russia, ну конкретно нужно исправить во эти 2 строчки:
Rule Russia 1993 max - Mar lastSun 2:00s 1:00 S
Rule Russia 1996 max - Oct lastSun 2:00s 0 -
на
Rule Russia 1993 2011 - Mar lastSun 2:00s 1:00 S
Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
Добавляем в конец файлика europe.minsk.2011 информацию о зоне Europe/Minsk ( смотри выше ).
Компилируем:
# zic europe.minsk.2011
Все, проблема решена:
# zdump -v Europe/Minsk |grep 2011
Europe/Minsk Wed Oct 5 12:25:38 2011 UTC = Wed Oct 5 15:25:38 2011 EEST isdst=1
Europe/Minsk Sat Mar 26 23:59:59 2011 UTC = Sun Mar 27 01:59:59 2011 EET isdst=0
Europe/Minsk Sun Mar 27 00:00:00 2011 UTC = Sun Mar 27 03:00:00 2011 EEST isdst=1
Ну и для надежности выполнить команду zonereload или перезагрузиться.
Скачать файлик europe.minsk.2011
Информация в тему:
man zic
man zdump
UPDATE 20111205
Исходники timezones доступны здесь http://www.iana.org/time-zones
05.10.2011 в 17:32
Так а зачем что-то придумывать самому, если в версии 2011k в Olson Database все изменения уже учтены:
ftp://elsie.nci.nih.gov/pub
По поводу перезагрузки: если установлен патч 142909-17 или более поздний, то достаточно выполнить команду tzreload. В противном случае необходима перезагрузка.
15.10.2011 в 15:05
Друзья!
Подскажите пожалуйств как тоже самое сделать в HP-UX.
Заранеее благодарю!
16.10.2011 в 11:13
Неперевод часов 2011
HP-UX Russian DST change
HP-UX man tztab
05.12.2011 в 02:19
к сожалению скачать с ftp://elsie.nci.nih.gov/pub нельза, так-как его закрыли по дуратскому иску =(
вот здесь находятся все версии http://www.iana.org/time-zones