参考资料一、linux调整系统时区/时间的方法(tzselect命令)
1) 找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai
用这个文件替换当前的/etc/localtime文件。
2) 修改/etc/sysconfig/clock文件,修改为:
ZONE="Asia/Shanghai"
[color=red]UTC=true[/color]
ARC=false
3)
时间设定成2005年8月30日的命令如下:
#date -s 08/30/2005
将系统时间设定成下午6点40分0秒的命令如下。
#date -s 18:40:00
4)
同步BIOS时钟,强制把系统时间写入CMOS,命令如下:
#clock -w
5)重启apache。
参考资料二、
本文档解释了如何从linux下设置计算机的时钟,如何设置您的时区和其它与linux如何保存时间相关的材料。
您的计算机有两个时钟,一个是始终运行的、由电池供电的( 硬件的、BIOS或CMOS
)时钟,另一个是由运行在您的计算机上的操作系统维护的( 系统
)时钟。硬件时钟通常只在操作系统启动时用来设置系统时钟,然后直到重启或关闭系统,由系统时钟来记录时间。在Linux
系统中,您可以选择用UTC/GMT 时间或本地时间来记录硬件时钟。推荐的选项是用UTC 记录,因为夏令时可以自动记录。使用UTC
记录硬件时钟的唯一不足是,如果您使用双系统,其它操作系统,如DOS 要求硬件时钟用本地时间设置,那么在那个操作系统里时间将是错误的。
设置时区:
Linux 下的时区是通过建立从/etc/localtime[1] 到/usr/share/zoneinfo [2]
目录下与您所在时区相符的文件的符号链结实现的。例如,由于我在南澳大利亚,/etc/localtime就是到
/usr/share/zoneinfo/Australia/South的符号链结。要建立这个链结,运行:
ln -sf ../usr/share/zoneinfo/your/zone /etc/localtime
替换your/zone 为形如Australia/NSW或Australia/Perth 的文件。看看/usr/share/zoneinfo目录都有什么时区。
[1] 这里假设/usr/share/zoneinfo 是到/etc/localtime 的链结的前提是Redhat Linux
[2] 在旧版本的系统里,您会发现使用/usr/lib/zoneinfo而不是/usr/share/zoneinfo。参考后面“一些应用程序中时间错误”。
设置UTC 或本地时间:
当Linux 启动时,一个启动脚本运行/sbin/hwclock 程序复制当前硬件时钟时间到系统时钟。hwclock
假定硬件时钟设置为本地时间,除非它使用了--utc 参数。在RedHat
Linux下您不是编辑启动脚本,而是编辑/etc/sysconfig/clock 文件,相应的改变UTC
一行为UTC=true或UTC=false。
设置系统时钟:
在Linux 下设置系统时钟使用date命令。例如,设置当前时间和日期为July 31,11:16pm,运行date 07312316
( 注意这里的时间是24小时制) ;如果您想设置年份为1998, 应该运行date 073123161998 ;要是也想设置秒,运行date
07312316.30或date 073123161998.30。要查看Linux 当前本地时间,使用date,不带参数。
设置硬件时钟:
要设置硬件时钟,我喜欢的方式是首先设置系统时钟,然后设置硬件时钟为当前系统时钟时间,使用命令/sbin/hwclock
--systohc (或 /sbin/hwclock --systohc --utc ) ,如果您使用UTC 保存硬件时钟)
。要查看当前硬件时钟的设置,不带参数运行hwclock 。如果硬件时钟是UTC 保存,而您想看相应的本地时间,运行/sbin/hwclock
--utc 。
一些应用程序中时间错误:
如果一些应用程序,如date显示了正确的时间,而另一些则错误,而您运行着RedHat Linux
5.0/5.1,您很可能遇到了一个由于将时区信息从/usr/lib/zoneinfo 移动到/usr/share/zoneinfo
引起的bug 。修复的方法是建立一个从/usr/lib/zoneinfo 到/usr/share/zoneinfo 的符号链结:
ln -s ../share/zoneinfo /usr/lib/zoneinfo 。
小结:
*/etc/sysconfig/clock 设置硬件时钟,无论是用UTC 保存还是用本地时间保存
*建立/etc/localtime到/usr/share/zoneinfo/...的符号链结来设置时区
*运行date MMDDhhmm 来设置当前系统日期/ 时间
*运行/sbin/hwclock --systohc [--utc]来设置硬件时钟
其它有趣的注解:
Linux kernel总是按照从UTC 时间1970年1 月1 日午夜开始的秒数来储存和计算时间,无论您的硬件时钟是否用UTC
保存。转换到本地时间的工作是运行时完成的。这样做的一个妙处是,如果某人从不同的时区使用您的计算机,他可以设置时区环境变量,所有的日期和时间可以按
他的时区正确显示。
如果自UTC 1972年1 月1 日开始的秒数用保存为带正负号32位整数,如同在您的Linux/Intel
系统上一样,您的时钟将在2038年停止工作。Linux 没有Y2K
问题,但是确实存在2038年的问题。令人期望的是,那时我们都会使用64位系统来运行Linux
了。64位整数将使我们的时钟一直运行到大约2922.71亿年。
其它值得一看的程序:
* rdate ──从远程机器获得当前时间;可以用来设置系统时间
* xntpd ──类似rdata ,但是它是相当精确的,并且您需要有永久的网络连结xntpd 持续地运行,记录网络延时、时钟漂移等事件但是也有一个程序( ntpdate ) 包括在内,像rdate 一样设置当前时间。
附录一:(推荐)
CST时区问题
在很多unix下用date命令都能看到当前的时区。很多unix下中国时区都是用CST表示的。但是这个表示方法非常不合理。因为CST同时代表了下面4个时区。
CST Central Standard Time (USA) UT-6:00
CST Central Standard Time (Australia) UT+9:30
CST China Standard Time UT+8:00
CST Cuba Standard Time UT-4:00
在unix下通过/etc/localtime这个硬连接指向的/usr/share/zoneinfo下的时区文件表示当前的真正时区。比如
/etc/localtime指向了/usr/share/zoneinfo/Asia/Shanghai这个文件的时候,CST就代表了中国标准时间。
但是很多语言的时间函数库根本不做这个判断,往往就是用一个独立的时区配置文件做时区关键字和GMT的转换。因此很多系统里面CST都变成了GMT-6,也就是美国中部时间。
在zope里面也是如此。而且很奇怪的是有的地方做了正确的判断,有的地方没做正确判断。
比如文件的最后修改时间就是错的,但是如果对一个页面做comment的时候,comment时间就是正确的。
修改Zope中DateTime/DateTime.py的定义为:'cst':'GMT+8',就能够解决这个问题。
但是这样做就需要改代码,然后重新编译。
但既然CST这么不确定,就不能用。幸好有一个HKT,是表示香港的时间,也是东8区,这个没有错。托香港的福,就用这个好了。
附录二、世界时区及时差计算
作者/来源:
2004-07-10 16:22 PM
责任编辑: 游乐儿
各地的标准时间为格林威治时间(G.M.T)加上 (+) 或减去 (-) 时区中所标的小时和分钟数时差。许多国家还采用夏令时(DST), 比如美国每年4月到9月实行夏令时,时间提前一个小时。
时差的计算方法:两个时区标准时间(即时区数)相减就是时差,时区的数值大的时间早。比如中国是东八区(+8),美国东部是西五区(-5),两地的时差是13小时,北京比纽约要早13个小时;如果是美国实行夏令时的时期,相差12小时。
附:世界标准时间表
标准时间代码
与GMT的偏移量
描述
NZDT
+13:00
新西兰夏令时
IDLE
+12:00
国际日期变更线,东边
NZST
+12:00
新西兰标准时间
NZT
+12:00
新西兰时间
AESST
+11:00
澳大利亚东部夏时制
CST(ACSST)
+10:30
中澳大利亚标准时间
CADT
+10:30
中澳大利亚夏时制
SADT
+10:30
南澳大利亚夏时制
EST(EAST)
+10:00
东澳大利亚标准时间
GST
+10:00
关岛标准时间
LIGT
+10:00
澳大利亚墨尔本时间
CAST
+9:30
中澳大利亚标准时间
SAT(SAST)
+9:30
南澳大利亚标准时间
WDT(AWSST)
+9:00
澳大利亚西部标准夏令时
JST
+9:00
日本标准时间,(USSR Zone 8)
KST
+9:00
韩国标准时间
MT
+8:30
毛里求斯时间
WST(AWST)
+8:00
澳大利亚西部标准时间
CCT
+8:00
中国沿海时间(北京时间)
JT
+7:30
爪哇时间
IT
+3:30
伊朗时间
BT
+3:00
巴格达时间
EETDST
+3:00
东欧夏时制
CETDST
+2:00
中欧夏时制
EET
+2:00
东欧,(USSR Zone 1)
FWT
+2:00
法国冬时制
IST
+2:00
以色列标准时间
MEST
+2:00
中欧夏时制
METDST
+2:00
中欧白昼时间
SST
+2:00
瑞典夏时制
BST
+1:00
英国夏时制
CET
+1:00
中欧时间
DNT
+1:00
Dansk Normal Tid
FST
+1:00
法国夏时制
MET
+1:00
中欧时间
MEWT
+1:00
中欧冬时制
MEZ
+1:00
中欧时区
NOR
+1:00
挪威标准时间
SET
+1:00
Seychelles Time
SWT
+1:00
瑞典冬时制
WETDST
+1:00
西欧光照利用时间(夏时制)
GMT
0:00
格林威治标准时间
WET
0:00
西欧
WAT
-1:00
西非时间
NDT
-2:30
纽芬兰(新大陆)白昼时间
ADT
-03:00
大西洋白昼时间
NFT
-3:30
纽芬兰(新大陆)标准时间
NST
-3:30
纽芬兰(新大陆)标准时间
AST
-4:00
大西洋标准时间(加拿大)
EDT
-4:00
(美国)东部夏令时
CDT
-5:00
(美国)中部夏令时
EST
-5:00
(美国)东部标准时间
CST
-6:00
(美国)中部标准时间
MDT
-6:00
(美国)山地夏令时
MST
-7:00
(美国)山地标准时间
PDT
-7:00
(美国)太平洋夏令时
PST
-8:00
(美国)太平洋标准时间
YDT
-8:00
Yukon夏令时
HDT
-9:00
夏威仪/阿拉斯加白昼时间
YST
-9:00
Yukon标准时
AHST
-10:00
夏威仪-阿拉斯加标准时间
CAT
-10:00
中阿拉斯加时间
NT
-11:00
州时间(Nome Time)
IDLW
-12:00
国际日期变更线,西边