Jump to content
Калькуляторы

Переход на зимнее время

Всем привет :) Кто-нибудь уже озаботился проблемой перехода на зимнее время (а точнее его отсутствия) в этом году? Мне кажется, машинки с FreeBSD как обычно перейдут на него в последнее воскресенье октября, а Россия то не переходит, вроде как. Погуглил на тему freebsd daylight savings time 2011, ничего особо вразумительного нет. Придется что-то вручную ковырять, или может уже патчи есть какие-нибудь?

Share this post


Link to post
Share on other sites

Всем привет :) Кто-нибудь уже озаботился проблемой перехода на зимнее время (а точнее его отсутствия) в этом году? Мне кажется, машинки с FreeBSD как обычно перейдут на него в последнее воскресенье октября, а Россия то не переходит, вроде как. Погуглил на тему freebsd daylight savings time 2011, ничего особо вразумительного нет. Придется что-то вручную ковырять, или может уже патчи есть какие-нибудь?

 

Патчи уже в ствол добавили. Для России, Украины и Белоруссии.

Share this post


Link to post
Share on other sites

Если не обновлять систему до стабла(каретнта) то:

 

cd /usr/ports/misc/zoneinfo/

make all install clean

 

и далее, если /etc/localtime - симлинк, то все работает сразу, если нет, то нужно озаботиться перезаписыванием /etc/localtime из нужного. (ну как угодно, хоть сисинсталл, хоть cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime указав в качестве источника свою зону)

 

если /etc/localtime симлинк и версия ниже 8 (или сорцы ниже конца августа) то после installworld переустановить misc/zoneinfo

 

для проверки сейчас по команде date должно вываливаться название временной зоны зимнее (для Москвы MSK а не MSD) ну и верное время.

 

для не фри или искать обновление, если нет то взять

 

ftp://elsie.nci.nih.gov/pub/tzdata2011k.tar.gz (имя файла меняется при изменениях временных зон, нужно посмотреть текущее название)

$ wget ftp://elsie.nci.nih.gov/pub/tzdata2011k.tar.gz
$ tar -xzf tzdata2011k.tar.gz
$ zic -d ./zoneinfo africa antarctica asia \
   etcetera europe factory northamerica \
   southamerica systemv
$ cd zoneinfo
$ cp -r * /usr/share/zoneinfo/

 

ну и далее тоже самое с /etc/localtime, что описано во втором абзаце.

 

для фри второй вариант тоже прокатит, если порты лень вытягивать свежие к примеру, в принципе порт именно это и делает. А в /usr/src/share/zoneinfo лежит именно этот файлик распакованный разработчиками, когда они удосужились оюбновить это место + мейкфайл.

 

для винды равной большей xp-2003 в конце августа M$ родила соотв исправление. испроавление встает даже на леченную машину, единственная сложность его скачать. если не подходит (ну к примеру винда 2000 или ниже) то на M$ сайте раздают tzedit, им править руками. не забыть после правки сменить зону куданить, применить, потом на нужную и снова применить.

 

кстати судя по

$ zdump /usr/share/zoneinfo/Europe/Kiev
/usr/share/zoneinfo/Europe/Kiev  Tue Sep 27 23:05:40 2011 EEST
$ zdump /usr/share/zoneinfo/Europe/Minsk
/usr/share/zoneinfo/Europe/Minsk  Tue Sep 27 23:06:04 2011 EEST

 

в сегодняшнем стабле про новые веяния на Укрине и в Белоруссии пока не в курсе. ДА и в /usr/ports/misc/zoneinfo/ файлик не последний тянется.. Россия там везде поправлена. А для остальных пока второй вариант скорее всего. там отдают FET для обоих... ну или ждать пока включат куда надо.

Share this post


Link to post
Share on other sites

Мне почему-то кажется, что придется что-то поправлять в postgres'е тоже, т.к. он использует свои файлики (в своей директории) с наименованием зон, и там скорее всего старая инфа (зона MSK будет считаться +3, а не +4 к UTC)

Share this post


Link to post
Share on other sites

все вышесказанное относится к операционной системе самой по себе и ко всем программам пользующим ее средства для вычисления времени. Если кто то в программе нахардкодил +3 и даты сдвига, то ой, программу придется править.

 

например для mySQL есть такая вот ссылка

http://dev.mysql.com/doc/refman/5.1/en/time-zone-upgrades.html

 

И если оно пользуется то

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -p -u root mysql

 

должно поправить данные

 

по постгресу поискать наверное тоже можно. не мы первые не мы последние, кто временные зоны меняет. Вон, они за год до буквы k наплодили изменений.

Share this post


Link to post
Share on other sites

А кто уже строчки нарисовал для DLink (3526)? Mikrotik, конечно, в пролете наверное без обновления. И для Cisco?

а оно сильно надо? у нас уже второй раз за год меняют, сцуки, поэтому ещё с первой смены всё железо по UTC живёт

ну а нарисовать сейчас совсем просто, переходов нет, чисто смещение

Share this post


Link to post
Share on other sites

плохой совет, как уже сказали выше нужно ставить свою зону из tzdata 2011h или свежее

# ln -sf /usr/share/zoneinfo/Etc/GMT-4 /etc/localtime

это тоже плохо, можно нарваться на красивые грабли если /usr отдельный раздел

Share this post


Link to post
Share on other sites

Я для FreeBSD сделал как-то так

#!/bin/sh

FREEBSDVER=`uname -r | awk -F. '{print($1)}'`

echo "*default host=cvsup2.ru.freebsd.org" > /etc/supfile
echo "*default base=/var/db" >> /etc/supfile
echo "*default prefix=/usr" >> /etc/supfile
echo "*default release=cvs tag=RELENG_${FREEBSDVER}" >> /etc/supfile
echo "*default delete use-rel-suffix" >> /etc/supfile
echo "*default compress" >> /etc/supfile
echo "src-share" >> /etc/supfile

csup -L 2 /etc/supfile

CURDIR=`pwd`
cd /usr/src/share/zoneinfo
zic europe
cd $CURDIR

tzsetup

Share this post


Link to post
Share on other sites

Спасибо st_re за подробные пояснения, обновился нормально :)

 

Для постгреса если кому надо - нужно скопировать зоны так же как в /usr/share/zoneinfo, но в каталог с зонами там, где установлен постгрес (допустим /usr/local/pgsql/share/timezone), после чего перезапустить постгрес - и все буит работать. Не знаю, может и без этого работать будет (только после обновления зон в системе), но я на всякий случай и в постгресе обновил.

Share this post


Link to post
Share on other sites

и для версий ниже 7 не сработает. Там только безопасность правят.

$uname -r
6.2-STABLE
$grep -A 4 -B 1 "Medvedev" /usr/src/share/zoneinfo/europe
# From Alexander Krivenyshev (2011-06-14):
# According to Kremlin press service, Russian President Dmitry Medvedev
# signed a federal law "On calculation of time" on June 9, 2011.
# According to the law Russia is abolishing daylight saving time.
#
# Medvedev signed a law "On the Calculation of Time" (in russian):
# <a href="http://bmockbe.ru/events/?ID=7583">
# http://bmockbe.ru/events/?ID=7583
# </a>
#
# Medvedev signed a law on the calculation of the time (in russian):
# <a href="http://www.regnum.ru/news/polit/1413906.html">
# http://www.regnum.ru/news/polit/1413906.html
# </a>

У меня сорцы таймзоны обновились.

На всякий случай сравнил с /usr/src/share/zoneinfo/europe из 8.2-RELEASE. diff сказал, что отличий нет.

Что я сделал не так?

Edited by morom

Share this post


Link to post
Share on other sites

Ааа.. значит кто-то убедил, что это влияет на безопасность ;) Кому-то респект.

 

в прошлом моем сообщении сменить 7 на 6 ;)

 

# ls -la /usr/local/cvsup5/src/share/zoneinfo/
total 508
drwxr-xr-x   2 root  wheel     512  3 окт 16:47 .
drwxr-xr-x  25 root  wheel     512  3 окт 16:47 ..
-rw-r--r--   1 root  wheel    1295 25 мар  2008 Makefile
-rw-r--r--   1 root  wheel   21462  9 ноя  2001 Theory
-rw-r--r--   1 root  wheel   23455 18 окт  2007 africa
-rw-r--r--   1 root  wheel   12490  2 сен  2007 antarctica
-rw-r--r--   1 root  wheel   79579 25 мар  2008 asia
-rw-r--r--   1 root  wheel   57690  2 сен  2007 australasia
-rw-r--r--   1 root  wheel    3896 25 мар  2008 backward
-rw-r--r--   1 root  wheel    2920 12 май  2006 etcetera
-rw-r--r--   1 root  wheel  108249  6 янв  2008 europe
-rw-r--r--   1 root  wheel     303 12 май  2006 factory
-rw-r--r--   1 root  wheel    2737 25 мар  2008 leapseconds
-rw-r--r--   1 root  wheel  109624 25 мар  2008 northamerica
-rw-r--r--   1 root  wheel   53727 25 мар  2008 southamerica
-rw-r--r--   1 root  wheel    1464 12 май  2006 systemv
-rwxr-xr-x   1 root  wheel     707 13 окт  2006 yearistype.sh
-rw-r--r--   1 root  wheel   18654 25 мар  2008 zone.tab

 

У меня еще где то и 4.х стоит, кажется ;)... вообще /usr/src/share/zoneinfo можно хоть от 9 на 4 поставить.

 

в /usr/ports/misc/zoneinfo/ воткнули самый свежий tzdata2011k

Share this post


Link to post
Share on other sites

Что-то я не могу вкурить откуда postgres берёт timezon'ы.

 

На сервере с debian6 полностью обновлённом ситуация такая:

postgres=# SELECT '2011-09-01'::timestamp with time zone, '2011-01-01'::timestamp with time zone, '2011-12-01'::timestamp with time zone ;

timestamptz | timestamptz | timestamptz

------------------------+------------------------+------------------------

2011-09-01 00:00:00+04 | 2011-01-01 00:00:00+03 | 2011-12-01 00:00:00+04

 

Тут всё правильно.

 

На сервере, где половина пересобрано вручную и ничего из репы не обновишь(обсуждать причины этого безобразия - не для этого топика) такой результат:

postgres=# SELECT '2011-09-01'::timestamp with time zone, '2011-01-01'::timestamp with time zone, '2011-12-01'::timestamp with time zone ;

timestamptz | timestamptz | timestamptz

------------------------+------------------------+------------------------

2011-09-01 00:00:00+04 | 2011-01-01 00:00:00+03 | 2011-12-01 00:00:00+03

Что вполне ожидаемо.

 

Далее вопрос в том, как вручную научить postgres правильным зонам, если нельзя тупо всё проапдейтить из репы? Т.е. где postgres хранит реально используемые правила для зон?

Share this post


Link to post
Share on other sites

Я копировал скомпиленные zic'ом таймзоны в /usr/local/pgsql/share/timezone, потом перезапускал постгрес - и все заводилось.

Edited by networks

Share this post


Link to post
Share on other sites

Нашёл только такие файлы:

 

/usr/share/postgresql/timezonesets
/usr/share/postgresql/timezonesets/India
/usr/share/postgresql/timezonesets/Europe.txt
/usr/share/postgresql/timezonesets/Australia
/usr/share/postgresql/timezonesets/Default
/usr/share/postgresql/timezonesets/Pacific.txt
/usr/share/postgresql/timezonesets/America.txt
/usr/share/postgresql/timezonesets/Atlantic.txt
/usr/share/postgresql/timezonesets/Asia.txt
/usr/share/postgresql/timezonesets/Africa.txt
/usr/share/postgresql/timezonesets/Indian.txt
/usr/share/postgresql/timezonesets/Antarctica.txt
/usr/share/postgresql/timezonesets/Australia.txt
/usr/share/postgresql/timezonesets/Etc.txt

 

Но в них написано:

This file is NOT loaded by the PostgreSQL database. It just serves as a template for timezones you could need.

 

Что-то я пока не понимаю откуда он берёт таймзоны :(

Share this post


Link to post
Share on other sites

Похоже до меня дошло...

 

Некоторые linux-вендоры компилят postgres с опцией --with-system-tzdata=PATH_TO_SYSTEM_TIMEZONES, поэтому я не могу найти постгресовские зоны.

 

Там где postgres скомпилен вручную, таймзоны есть в посгресовской папке...

Share this post


Link to post
Share on other sites

исходник tzdata2011k можно брать из репозитория debian

 

Кто-нибудь проделывал танцы с бубномтаймзонами с mysql4 и mysql5. можете поделиться опытом?

Share this post


Link to post
Share on other sites

Из комментариев к коммиту ports/misc/zoneinfo

Due to legal problems, ado and Paul Eggert have to temporary suspend

their work on the timezone database

(http://thread.gmane.org/gmane.comp.time.tz/4133). Their work has

been continued by volunteers on the tz community and the hosting

of the data files is done by Robert Elz at ftp://munnari.oz.au/pub/.

 

Кто-нибудь проделывал танцы с бубномтаймзонами с mysql4 и mysql5. можете поделиться опытом?

 

что то кроме указанного в

 

http://forum.nag.ru/forum/index.php?showtopic=69606&view=findpost&p=643109

 

там мешает работе с датами ,

Share this post


Link to post
Share on other sites

php, кстати, тоже пользует по умолчанию свою внутреннюю базу. И тогда или апдейтиться или есть такая вот штучка:

 

http://pecl.php.net/package/timezonedb

 

http://www.electrictoolbox.com/correct-php-timezone/

 

# echo '<?php print (strtotime ("04:00:00 31 Oct 2010")-strtotime ("01:00:00 31 Oct 2010"))/60/60 . "\n" ?>' | php
4
#echo '<?php print (strtotime ("04:00:00 30 Oct 2011")-strtotime ("01:00:00 30 Oct 2011"))/60/60 . "\n" ?>' | php
3

 

если второе число 4, то опаньки...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.