如何设置 Linux Time Zone

在Linux下glibc提供了我们事先编译好的许多timezone文件, 他们就放在/usr/share/zoneinfo这个目录下,这里基本涵盖了大部分的国家和城市

代码:[root@us3 ~]# ls -F /usr/share/zoneinfo/ Africa/ Australia/ Cuba Etc/ GMT0 Iceland Japan MST Poland right/ Universal Zulu America/ Brazil/ EET Europe/ GMT-0 Indian/ Kwajalein MST7MDT Portugal ROC US/ Antarctica/ Canada/ Egypt Factory GMT+0 Iran Libya Navajo posix/ ROK UTC Arctic/ CET Eire GB Greenwich iso3166.tab MET NZ posixrules Singapore WET Asia/ Chile/ EST GB-Eire Hongkong Israel Mexico/ NZ-CHAT PRC Turkey W-SU Atlantic/ CST6CDT EST5EDT GMT HST Jamaica Mideast/ Pacific/ PST8PDT UCT zone.tab [root@us3 ~]# 在这里面我们就可以找到自己所在城市的time zone文件. 那么如果我们想查看对于每个time zone当前的时间我们可以用zdump命令[root@us3 ~]# zdump Hongkong Hongkong Fri Oct 19 13:10:49 2012 HKT [root@us3 ~]# 那么我们又怎么来告诉系统我们所在time zone是哪个呢? 方法有很多,这里举出两种.

第一个就是修改/etc/localtime这个文件,这个文件定义了我么所在的local time zone.

我们可以在/usr/share/zoneinfo下找到我们的time zone文件然后拷贝去到/etc/localtimezone(或者做个symbolic link)

假设我们现在的time zone是BST(也就是英国的夏令时间,UTC+1)

代码:[root@us3 ~]# date Fri Oct 19 01:11:15 EDT 2012 [root@us3 ~]# 我们想把time zone换成上海所在的时区就可以这么做

代码:[code]# ln -sf /usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime

date

Fri Jul 6 06:35:52 CST 2007[/code]这样时区就改过来了(注意时间也做了相应的调整)

第二种方法也就设置TZ环境变量的值. 许多程序和命令都会用到这个变量的值. TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令

代码:[code][root@us3 ~]# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.

  1. Africa
  2. Americas
  3. Antarctica
  4. Arctic Ocean
  5. Asia
  6. Atlantic Ocean
  7. Australia
  8. Europe
  9. Indian Ocean
  10. Pacific Ocean
  11. none - I want to specify the time zone using the Posix TZ format.
    #? [/code]会让你选择所在的国家和城市(我省略了这些步骤),最后输出相应的TZ变量的值.那么如果你设置了TZ的值之后时区就又会发生变化

通过这两个例子我们也可以发现TZ变量的值会override /etc/localtime.

也就是说当TZ变量没有定义的时候系统才使用/etc/localtime来确定time zone。

所以你想永久修改time zone的话那么可以把TZ变量的设置写入/etc/profile里。