如果只关注操作,直接查看实践部分就ok。
一、问题
问题描述:
采用EasyBCD设置引导通过硬盘安装完成了Win7/Ubuntu双系统之后。发现一个问题:从Win7切换到Ubuntu或者从Ubuntu切换到Win7之后都会出现时间错误的情况。我是在第二次注意到这个问题的时候打算解决掉它的。
详细描述
我关注到我的Win7时间不对的时候看到了网友的描述:今天开机时候没插网线,直接进了 ubuntu,发现时间快了8小时,插上网线就正常了,所以觉得不太正常,所以重启进了win7,发现慢了8小时,这才意识到可能是两个系统设置不同,导致的这个时间问题看完之后我在自己的电脑做了测试和这个状况完全符合我当前的状况。
二、理论(原因)
- Why:
Ubuntu和Windows默认的时间管理方式不同 - Where:
实力推荐:漫谈时间和时区——大神 - 总结
Win/Linux(Ubuntu)使用的都是 协调世界时(UTC)。那为什么会出现错误呢?
- 首先电脑主板有一个系统硬件时间模块,用来当系统关闭以及电脑断电之后维持系统时间在一个系统给定值的基础上正确累计确保下次开机的时间不会出现过度偏差的电路。
- 其次Win/Ubuntu每次退出系统的时候都把时间交个这个电路处理
- 真正的症结就在于系统交付给电路的时间是什么,以及系统拿到电路提供的时间之后有做了什么上。
- Win/Ubuntu使用的都是UTC标准的
- 关键点就在于Win默认使用的是本地时间;Linux(Ubuntu)使用的是“协调世界时Universal Time Coordinated(UTC)”
- (UTC)被应用于许多互联网和万维网的标准中,并沿用至今,例如,网络时间协议(NTP, Network Time Protocol)就是协调世界时在互联网中使用的一种方式。
- 本地时间:UTC+本地时区(北京:UTC+8)
- 标准时间:UTC+格林威治所在时区(TUC+0)
- 别问标准是怎么来的,世界上关于时间总得有一个规则,这个规则是什么不重要重要的是要有,这就是历史选中的规则,我们了解并运用就好。
- 也就是说Win在硬件电路存储的时间就是 本地时间,Ubuntu在硬件电路存储的时间是 标准时间
- Win 开机取出硬件时间来直接就是用
- Ubuntu 系统启动取出硬件时间来和所设置的时区做相应的运算后使用。
三、实际操作
看别的博客知道这里的操作方法有很多,我先给自己定一个基调。
- 我认为面向接口编程讲究的一个关键点是:接口的实现方与需求方在数据交换的时候一定要保证数据的简洁性才是好的实现方式。也就是说接口间交换数据的时候尽可能使用基本数据类型,尽可能使用公共类库中存在的数据结构。
- 所以说在以上为理论基础的情况下我认为Win的做法不是太好,在数据的交流方面没有用更简洁的数据类型,世界标准时间(UTC),而是使用了本地时间(UTC+时区)
好我们把Win的时间操作类型改为和Ubuntu一样的方式。
- 我在操作前的状况
- Win7 X64 旗舰版
- Ubuntu16.04
- 处于Win 当前时间和(UTC+0)一致,比北京时间慢8个小时
- 操作步骤
- 打开注册表管理器:命令行 输入:regedit 回车。
- 导航到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
位置。 - 右侧空白处:右击 → 新建 → QWORD(64位)值
- 将文件命名为 “
RealTimeIsUniversal
”世界通用时间 - 双击
RealTimeIsUniversal
这一条目,确保基数
为十六进制(H)
将数值数据修改为1
。 - 确定,重启计算机。
- 如果重启后发现时间比当前正确的时间快了你所在时区的时间(北京会快8小时)修改BIOS时间再启动,就OK。