Wednesday, May 31, 2006

Setting System Time in Debian

Linux中使用两种时间:世界时间(GMT)和本地时间(Local Time)。世界时间即格林尼治时间。而各个时区用户根据所在的时区(Time Zone)与国际时间的差值来获得本地时间。比如中国在东8区(CST +8:00),所以本地时间比国际时间快8小时。

Debian下设置时区的命令是tzselect或者tzconfig。

Linux 在每次启动时会加载BIOS的时间,并在退出时把时间写回BIOS。默认情况下,Linux认为BIOS里的时间是世界时间(UTC)。因此它读入世界时 间然后根据用户所在时区计算出本地时间。对于中国而言,就是加上8小时。这种机制在多系统环境中会产生问题:因为Windows只认识本地时间,所以你在 Windows里设置的时间(会写回BIOS)在Linux环境中被认为是世界时间,从而导致Linux本地时间比正确时间快了8小时(对于中国而言)。 如果你在Linux里把本地时间减去8小时来修正(世界时间相应的也会被减去8),又会导致Windows里的时间慢了8小时(因为Linux在退出时会 将修改后的世界时间写回BIOS)。

Debian下的解决办法(应该适用于其它Linux版本)是编辑文件/etc/default/rcS,把其中的UTC=yes选项改为UTC=no(即让Linux认为BIOS里的是本地时间)。然后在BIOS里设置好正确的本地时间。

2008.4 更新: This doesn't work for debian4.0. Here is a solution, but I don't quite understand:
1) set UTC=no in file /etc/default/rcS
2) # hwclock --directisa --localtime
3) # hwclock --hctosys
3) append "--directisa" after HWCLOCKPARS= (at about 21 lines) in file /etc/init.d/hwclock.sh

2009.1 更新: Linux Debian 2.6.26-1-686下只需在 /etc/default/rcS 中写两行:
UTC=no
HWCLOCKPARS="--directisa"
重启后记得进BIOS改好时间,就可以了。

No comments: