Linux系统下时间处理全过程[09年2月刊]

来源:互联网 发布:php 商城框架 编辑:程序博客网 时间:2024/05/28 23:12

原贴:http://linux.chinaunix.net/ebook/doc/2009/03/06/1064422.shtml

Linux系统下时间处理全过程[09年2月刊]来源: Linux论坛  日期:2009.03.06 11:36 (共有0条评论) 我要评论 

ChinaUnix网友:art_codes



  对于一个操作系统,时间能够在开关机后正确显示,处理好两点要点就可以了,一是要在关机时候系统存储一个秒数。(按理说存储一个毫秒数应该更精确,但是也许是太占存储空间,反正现在业界形成的规定就是秒数)然后在关机的时候由主板上的电池每隔一秒钟就加一下它的数值就可以。这样系统就能在关机下还能存储住正确时间。在开机的时候在把这个被主板电池操作后的秒数加载回系统来处理就可以。这样一个时钟的存储过程从理论上就可以行得通。

  其实本来这样就可以了,但是这个地球毕竟是个球,导致有人是黑天有人是白天,没有办法。所以人们又分了时区,以GTM或UTC时间为全球时间的基准点,(这两个概念上我希望大家不要混,虽然起源背景有一些不同,但是到了实际应用中基本上表示的意义都是一样的,那就是全球的基准时间,数值上基本是相同的)为全球的基准时间,和地区的时间。比如中国的CST时间(CST = China Standard TimeUTC+8:00,大家看到的UTC+8:00=GTM+8:00)。由于UTC和CST都是一个数(秒数)所以将那个数存储bios的时间里面就是一个很严重的问题。经过测试不同的UTC和CST不同存储方式直接影响这系统间时间的兼容性。

时间处理方法1. 存储UTC的秒数那么整个系统的开关机过程将为:

关机:CST(时区变化,加减相应的小时)->UTC->bios----在这种情况下,在bios中看到的就是UTC时间。(由于bios中没有时区的概念,所以你要像看懂这个时间代表的是什么地方的时间,你一定要明白它由谁存的数,还有这个数原本代表了什么意义,如是那个时区的。)
开机:bios->UTC->CST(时区变化)


时间处理方法2. 存储CST的秒数那么整个系统的开关机过程将为:

关机:CST(不用时区变化了,之间化为秒数后)->bios----这个时候你在bios中看到的时间就是有时区的。
开机:bios->CST

  大家看到这两种方法后应该发现,其实真的不能说那种存储方法更好,其实过程都差不多,但是如果装两个不同操作系统的机子就有麻烦了,怎么说呢,比如一个操作系统(比如windows)是用2方法存储的时间,但是另一个操作系统是用1来存储时间的(大家要看到,他是这么存储时间的所以他一定也是用1的方法来解析的),那么在这个后一个的操作系统中可能看到正确的时间么?

  经过实际测试发现,现在操作系统的默认存储方法都是采用的是第二种方法(就是直接存储CST时间,如UBUNTU windowsfedora,不信大家可以自己去测试)。说到这里要说明白,以前看过有兄弟说机器一个是windows一个是linux双系统的机器里面时间老是错误的情况,那要怎么改呢?windows咱不懂不说了(主要是找不到在哪里改时间存储方式……),所以只能让linux去适应windows啦,改linux的时间存储方式就是去改/etc/sysconfig/clock这个文件(redhat和fedora里面有的,ubuntu默认下就和windows是匹配的配置随意大家不用改,而且ubuntu好像没有/etc/sysconfig/clock这个文件……)这个文件的内容如下
        # cat /etc/sysconfig/clock
        # The ZONE parameter is only evaluated by system-config-date.
        # The timezone of the system is defined by the contents of /etc/localtime.
        ZONE="Asia/Shanghai"
        UTC=false
        ARC=false

  看到UTC这行,对于他来说true就是用1的方法方法存储时间,false就是用2的方法来存储时间。为了配合windows所以大家只能改成false这样就可以万事大吉。

  还有一个需要和大家说的就是,大家都说 date 命令改的是系统时间,而 hwclock命令改的是硬件时间,但是我发现(大家不信可以自己去试试看)用hwclock --set--date="2009-2-13"根本改变不了系统的bios时间(我说的是改后重启系统后在bios中看到底是不是你设定的值),反而用date -s 可以改bios系统时间。这是为什么呢?原来是因为不管你改没改硬件时间,系统在关机的时候都会将当前的系统时间写入bios(之前的hwclock白改……),就像1或2存储过中的关机过程那样。所以说你用hwclock --set--date="2009-2-13"确实改了硬件时间,但是在关机的时候,这个时间又被当前系统时间给覆盖了,有人说hwclock--systohc可以改变硬件时间,我想说那你仔细想想这个命令有意义么?(你只不过是将当前的系统时间和硬件时间同步了一次,只是让关机时候的自动时间覆盖过程看不出来了而已。)

  我想说的就是这么多了,由于是刚开始学习linux,英文也不是很好(其实英语还行,但是一看见一大堆英语在一块就想吐……),所以很多的地方是实践后得出的结果,大家不信可以试试看,如有不对的还请多多指教。谢谢大家!

一些说明:
GTM、UTC国际的标准基准时间,用来同一时间用的,用户一般用不到,查看命令date -u
CST一般操作系统都用它为时间,查看命令date
setup命令设定时区超级好用

linux中有:
系统时间:简单可以理解为加载了时区的时间,如CST
硬件时间:简单理解为在bios中的时间

 

原创粉丝点击