红联Linux门户
Linux帮助

Linux的时间与时区(备忘)

发布时间:2007-06-21 00:28:02来源:红联作者:firmstre
  首先要说明的是我的系统是fedora,其他系统可能不完全相同。

  1,时间保存在硬件实时钟(RTC)中,RTC由主板电池供电,即使关断电源也不会造成时间丢失。

  2,系统启动时从RTC获取时间,这个步骤在rc.sysinit中做:

  a,首先从/etc/sysconfig/clock中获取RTC相关参数UTC/ARC/SRM。UTC为true表示RTC保存的时间是UTC时间,false表示保存的是本地时间。ARC与SRM的含义参考hwclock的manpage,一般false即可;

  b,根据上面获取的内容构造hwclock命令的参数,将时间由RTC读取到系统时钟。

  *需要说明的一点是hwclock的输出是本地时间,localtime/utc参数只是用来告诉hwclock命令COMS时区是哪个时区。比如Linux系统的系统时区设置为CST(中国标准时间),COMS时间采用墙上时间,即COMS时区也是CST,这时如果使用--utc参数,会让hwclock误以为COMS时区为UTC,所以输出的时间会自动+8。

  3,tzset():tzset在程序中用来初始化tzname等全局变量,它首先试图从环境变量“TZ”中获取时区,如果TZ环境变量存在,即getenv("TZ")返回值不为NULL,且包含内容有效,则使用TZ值;如果该变量存在但内容无效,比如包含错误的时区名字,则使用UTC;如果该变量不存在,即getenv("TZ")返回NULL,则查找系统时区设置文件,一般是/etc/localtime。localtime所指文件的内容格式可参考tzfile(5)。

  4,time():返回自00:00:00 UTC, January 1, 1970到现在所经过的秒数,注意,是UTC。

  5,ctime()/localtime()/mktime():这类和时区相关的函数内部会调用tzset,但只是第一次调用tzset会做实际初始化,后面的调用都是直接返回。

  6,系统关闭时,如执行shutdown/reboot/poweroff/halt等操作后,系统时间会保存到RTC中,这是在halt脚本中完成的,参看/etc/init.d/halt内容。

  补充一个tzset的用法:应用在chroot到非"/"目录前需要调用tzset(),否则chroot后可能无法获取正确时区信息。因为/etc/localtime已经找不到了。
文章评论

共有 0 条评论