文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Linux的时间与时区

Linux的时间与时区

时间:2006-04-01  来源:iry

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)。

 

相关阅读 更多 +
排行榜 更多 +
让炸弹飞

让炸弹飞

飞行射击 下载
雷霆机战星球崛起

雷霆机战星球崛起

飞行射击 下载
金属狂怒

金属狂怒

赛车竞速 下载