|
|
对于一个操作系统来说,时间能够在开关机后正确显示,处理好两点要点就可以了,一是要在关机时候系统存储一个秒数(按理说存储一个毫秒数应该更精确呀,但是也许是太占存储空间了把 ^_^ 反着现在业界形成的规定就是秒数啦)然后在关机的时候由主板上的电池每隔一秒钟就加一下它的数值就好啦 ^_^ 这样系统就能在关机下还能存储住正确的时间。在开机的时候在把这个被主板电池操作后的秒数加载回系统来处理就好啦。这样一个时钟的存储过程就说通啦。其实本来这样就可以了,但是这个地球竟然是个球,导致有人是黑天有人是白天,没有办法所以人又分了时区,以GMT或UTC时间为全球时间的基准点,(这两个概念上我希望大家不要混,虽然起源背景有一些不同,但是到了实际应用中基本上表示的意义都是一样的,那就是全球的基准时间,数值上基本是相同的)为全球的基准时间,和地区的时间。比如中国的CST时间(CST = China Standard Time UTC+8:00,大家看到啦UTC+8:00=GMT+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的方法来解析的),那么在这个后一个的操作系统中可能看到正确的时间么?(当然不能呀,能看到才怪 ^_^ )。
所以windows和Ubuntu或者linux系统组成双系统后,系统时候会出现相差大约8小时的情况。原因是 Linux 操作系统是以主机板 CMOS 时间做为格林威治标准时间,再根据系统设置的时区来确定目前系统时间(即时间处理方法1)。但是一般 Windows 系统并不如此,Windows 操作系统直接把 CMOS 时间认定为目前系统时间,不再根据时区转换(即:时间处理方法2)。
所以,如果同一计算机装了两个系统,进到不同的系统,会发现时间错乱。可以择一方法解决: 修改 Windows 去使用时区,或是修改 linux 不使用格林威治标准时间 UTC。
修改 Windows 使用格林威治标准时间 UTC方法如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\ 中加一项类型为 REG_DWORD 的机码,名称为 RealTimeIsUniversal,值设为 1。
修改 ubuntu 不使用格林威治标准时间 UTC (启用本地时间) 方法如下:
修改 /etc/default/rcS 原来的设定 UTC=yes 为 UTC=no。
修改linux的时间存储方式就是去改/etc/sysconfig/clock 这个文件(redhat和fedora里面有的)这个文件的内容如下
# 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就是用格林威治标准时间 UTC的方法存储时间啦,false就是用本地时间的方法来存储时间啦^_^。为了配合windows所以大家只能改成false这样就万事大吉啦 。 |
|