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区,这个没有错。托香港的福,就用这个好了。
附录二、
世界时区及时差计算 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
各地的标准时间为格林威治时间(G.M.T)加上 (+) 或减去 (-) 时区中所标的小时和分钟数时差。许多国家还采用夏令时(DST), 比如美国每年4月到9月实行夏令时,时间提前一个小时。 时差的计算方法:两个时区标准时间(即时区数)相减就是时差,时区的数值大的时间早。比如中国是东八区(+8),美国东部是西五区(-5),两地的时差是13小时,北京比纽约要早13个小时;如果是美国实行夏令时的时期,相差12小时。 附:世界标准时间表
|
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>