Linux系统下时间处理全过程[09年2月刊]
2009-03-07 02:01
260 查看
原贴: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 Time UTC+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 windows fedora,不信大家可以自己去测试)。说到这里要说明白,以前看过有兄弟说机器一个是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中的时间 | |
相关文章推荐
- 使用数据2分处理的通用分页存储过程 前半部分与后半部分数据访问时间相同,同等访问速度提高一倍
- 会员开通时间处理的存储过程|软件开发
- Linux系统调用的system_call处理过程分析
- 使用数据2分处理的通用分页存储过程 前半部分与后半部分数据访问时间相同
- 视频图像处理过程中的时间消耗问题
- 会员开通时间处理的存储过程|软件开发
- linux windows 硬件时间,系统时间,时区处理全过程,实践出真知 ^_^
- 时间按处理过程
- 处理用javascript获取服务器时间的过程--运用xmlhttp获取服务器时间
- 空闲时间的处理:OnIdle,以消息循环过程中为例(顺便解释PeekMessage与GetMessage的不同)
- R语言处理时间序列过程中的一些收获
- linux系统下文件编辑过程中意外退出,再次编辑提示交换文件的处理方式
- 弱鸡3,C# 一个Timer在等待过程中,interval被改变,时间如何处理,
- 关于Ext使用过程中的两个问题处理
- PHP时间戳,时间日期的处理
- Struts的处理页面请求的过程
- Struts2对请求的处理过程
- VB.NET轻松学会处理时间技巧(一)
- transcode_step()在转码过程中对pts、dts、duration的处理
- Hadoop: MapReduce2多个job串行处理 复杂的MapReduce处理中,往往需要将复杂的处理过程,分解成多个简单的Job来执行,第1个Job的输出做为第2个Job的输入,相互之间有一