Author: qbanke | Category: Linux & Unix
Comments: 评论关闭

Local vs. UTC
首先重要的问题是你使用utc还是local time.
UTC(Universal Time Coordinated)=GMT(Greenwich Mean Time)
Local time 是你手表上的时间

传统的POSIX计算机(Solaris,bsd,unix)使用UTC格式
linux可以处理UTC时间和蹩脚的Windows所使用的local time

到底是使用UTC还是local time可以这样来确定:
如果机器上同时安装有Linux和Windows,建议使用local time
如果机器上只安装有Linux,建议使用utc
确定后编辑/etc/sysconfig/clock, UTC=0 是local time; UTC=1 是UTC(GMT)

确定timezone
运行tzselect,回答问题后会告诉你时区的名称,比如”Asia/Shanghai”,把他记下来(后面我用$timezone代替)

设定timezone
# cp /usr/share/zoneinfo/$timezone /etc/localtime

重新启动或者运行时钟设置脚本使之发生作用

版本差异
由于发行版的差异,以上文件位置可能不同。
一般设置时钟所使用的启动脚本为/etc/rc.d/init.d/setclock
redhat是在/etc/rc.d/rc.sysinit中设置时钟,所以一般要重新启动

一 06, 2011
Author: qbanke | Category: Linux & Unix
Comments: 评论关闭

在很多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′,就能够解决这个问题。

但是这样做就需要改代码,然后重新编译。

我试着在zope的启动脚本里面加上TZ的环境变量设置,但是没有效果。我想,最根本的解决方法应该是改变unix服务器的时区设置方法吧。

Top
RSS for entries