我需要做什么使我的Red Hat Enterprise Linux 4系统配合2006年和2007年的在几个国家推行的夏令时间(DST)改变?
解决方法:

在2006和2007年有一些国家改变了使用夏令时间(DST)的日期。最早的改变是2006年三月二十六日在澳洲和一部分的美国印地安那州使用夏令时间。(参考:http://aa.usno.navy.mil/faq/docs/daylight_time.html)

重点:

1. 在2006年,澳洲因为英联邦运动会把夏令时间的完结日期推迟了一周,由2006年三月二十五日淩晨3时改到2006年四月二日淩晨3时。

2. 执行2005年的美国能源法案。由2007年三月起,美国的夏令时间改由每年三月的第二个星期日开始,在十一月的第一个星期日完结。

3. 加拿大的魁北克省(QC),安大略省(ON),新斯科舍(NS),努纳武特(NU),萨斯喀彻温(SK),马尼托巴(MB),新不伦瑞克(NB),爱德华王子岛(PE),艾伯塔(AB),不列颠哥伦比亚(BC),纽芬兰与拉布拉多(NL),西北地区(NT)和育空(YK)将在2007年三月份跟随美国所作的夏令时间改变。

4. 西澳大利亚州正进行三年的夏令时间试验,在2006年十二月三日开始,在三月的最后一个星期日完结。有关详情可参考另一篇文章:http://kbase.redhat.com/faq/FAQ_61_9647.shtm

5. 巴哈马将在2007年三月份跟随美国所作的夏令时间改变。

三个Red Hat Enterprise Linux的发行版都已经发布了有关的升级软件包,有几点需要留意:

升级tzdata包到不低於这个版本:

tzdata-2005m-1.EL4

这是第一个包含有关改变的tzdata包,已包括美国夏令时间的改变。

如果你的系统已登记Red Hat Network (RHN),可以用以下命令安装最新的tzdata包:

# up2date -u tzdata

要注意虽然时区资料已升级,但如果系统用的glibc-common软件包是 2.3.4-2.20 版本以下,系统并不会自动地更新/etc/localtime。如果系统是用glibc-common 2.3.4-2.20 版本以下,你需要做以下的其中一个操作:

  • 在同一个up2date或rpm命令中同时升级glibc-common和tzdata软件包。这样会把glibc-common中的一个tzdata-update命令加到/usr/sbin。glibc-common跟tzdata有依赖关系,所以tzdata会先安装,新的时区资料会先加到系统,然后glibc-common在%post(后安装程序)中会自动执行:
%triggerin common -p /usr/sbin/tzdata-update -- tzdata

这个命令会正确更新/etc/localtime。


  • 在新的tzdata包安装后,手动更新/etc/localtime。可以执行这个命令:
cp /usr/share/zoneinfo/$CURRENT_TIMEZONE /etc/localtime

$CURRENT_TIMEZONE就是指你系统用的时区(例如: America/NewYork)。

  • 重新运行system-config-date,然后保存设定。这将会把更新了的时区文件复制到/etc/localtime。这是最单的方法,但没有运行X Windows就用不了。

当更新完成后,所有依赖於/etc/localtime的程序都需要重启。最简单的方法是把整个系统重启,以确保所有程序都使用更新了的时区资料。

要测试系统有没有更新,可执行以下命令(假设你使用有DST改变的时区):

zdump -v /etc/localtime |grep 2007

如果显时DST改变的日期是正确,就代表更新成功。

参考: http://rhn.redhat.com/errata/RHEA-2005-656.html