Итак, помним о том что 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

4 комментария на запись “Как самому создать новую TIMEZONE в solaris?”

  1. Alex пишет:

    Так а зачем что-то придумывать самому, если в версии 2011k в Olson Database все изменения уже учтены:
    ftp://elsie.nci.nih.gov/pub

    По поводу перезагрузки: если установлен патч 142909-17 или более поздний, то достаточно выполнить команду tzreload. В противном случае необходима перезагрузка.

  2. Andrew пишет:

    Друзья!
    Подскажите пожалуйств как тоже самое сделать в HP-UX.
    Заранеее благодарю!

  3. ikorolev пишет:

    Неперевод часов 2011
    HP-UX Russian DST change
    HP-UX man tztab

  4. Den129 пишет:

    к сожалению скачать с ftp://elsie.nci.nih.gov/pub нельза, так-как его закрыли по дуратскому иску =(
    вот здесь находятся все версии http://www.iana.org/time-zones