- 论坛徽章:
- 0
|
Linux的时间与时区
以前使用Linux的时候没有怎么注意Linux中如何描述时间,前些天因为要和其他的系统校对时间,才在网上查了一些资料,大致了解了一些。我怕以后用的时候又忘记所以记下一些东西,以备日后查询。
Linux中的时间是以国际标准时间自1970年1月1日0时0分0秒以来的秒数表示的。但是这并不是我们日常所使用的日期格式,这是一个32位的整数;为了能表示我们所使用的日期,Linux系统中提供了一系列的函数和命令来显示或者设置当前的时间。我们最常用的命令是date。Date命令可以用来查看和设置Linux系统的当前系统时间。为什么是系统时间?因为在Linux系统中使用了系统时间的概念,以和硬件时间相区别。
硬件时间是计算机主板BIOS中的时间,也许是因为读取和存取硬件时间需要的时间比较长,也许是因为硬件时间的格式需要占用较多的内存;Linux系统自己维护了另一套时间系统,一般称为系统时间。Linux系统时间需要一个基数,如果没有这个基数每次系统启动都要从0开始计时了,所以Linux每次启动的时候都读取计算机BIOS的时间,以获得一个计时的基数;当Linux关闭的时候,Linux将把系统时间写到计算机BIOS中,以更新BIOS时间。这样系统在运行的时候就不再需要读写BIOS时间了。
当我们说某个时间的时候都是以某个时区为背景的,那BIOS时间有时区信息吗?回答是没有,这样BIOS时间的解释就由实现决定。在Windows系统中,都认为是本地时间;而在Linux系统中则由配置决定。以Fedora Linux为例,在配置文件/etc/sysconfig/clock中定义。典型的配置为:
ZONE=”Asia/Shanghai”
UTC=false
ARC=false
这样的配置说明了本地的时区是中国标准时区,BIOS时间为本地时间,ARC时间我们不讨论。有了这样的信息,我们就可以读取BIOS时间为系统时间。同步硬件时钟使用hwclock命令,我们看看Linux的启动脚本就知道Linux如何读取硬件时钟了。读取硬件时钟的工作在/etc/rc.d/rc.sysinit中完成,相关代码如下:
UTC=0
If [ -f /etc/sysconfig/clock ]; then
. /etc/sysconfig/clock
Fi
CLOCKFLAGS=”$CLOCKFLAGS –hctosys”
Case “$UTC” in
Yes|ture) CLOCKFLAGS=”$CLOCKFLAGS –utc”
No|false) CLOCKFLAGS=”$CLOCKFLAGS –localtime”
Esac
/sbin/hwclock $CLOCKFLAGS
这段代码的作用是,运行如下命令:/sbin/hwclock –hctosys –localtime。这就完成了从BIOS时间读取时间保存为系统时间的任务。当系统关闭的时候运行 /sbin/hwclock –systohc –localtime,就完成了同步BIOS时间到系统时间的任务。Hwclock就是完成读写硬件时间的命令,hwclock就是HardWare CLOCK的缩写。Hwclock有三个常用的选项,--hctosys,--systohc,--localtime,从字面意思就可以猜出它们的用途。--hctosys, hardware clock to system clock; --systohc system clock to hardware clock。Localtime就是把读取的时间认为是本地时间。既然是本地时间就需要有时区的信息,在Linux系统中时区的实现我没有详细的研究过,现说说TZ环境变量的使用。TZ环境变量中存储了本地时区的信息,可用echo $TZ查看当前的设置;在Fedora Linux 4中TZ环境变量已经不再使用,但我们还是可以配置为使用TZ以达到自己特定的需要。我们用date查看Linux系统当前的系统时间。Eg.
[user@localhost ~]$ date
Fri Mar 31 12:32:11 CST 2006
查看当前utc时间:
[user@localhost ~] $ date –u
Fri Mar 31 04:32:18 CST 2006
查看TZ环境变量:
[user@localhost ~] $ echo $TZ
设置TZ环境变量:
[user@ localhost ~] export TZ=”beijing time-8”
[user@localhost ~] echo $TZ
Beijing time-8
再看看时间:
[user@localhost ~] $ date
Fri Mar 31 12:35:10 beijing time 2006
现在时区成了北京时间了而不是我们不很了解的CST(China Standard Time)。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/7835/showart_94057.html |
|