重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
安装完黑苹果后,和Windows之间切换,发现时间跟OS X系统下不一样,总是慢八小时,是因为两个系统读取硬件时间的方式不一样,windows会把硬件的时间当做本地时间,而苹果系统会计算UTC来当做系统时间。
成都网站建设哪家好,找成都创新互联!专注于网页设计、成都网站建设、微信开发、成都小程序开发、集团企业网站设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:混凝土搅拌罐等众多领域,积累了大量丰富的经验,同时也获得了客户的一致表扬!
解决办法:
windows下管理员模式运行cmd或者powershell,输入下面的命令
重启电脑完成。也适用于一些linux和windows共存的时间问题。
装完win7和Linux双系统后,进入Linux后再进入Windows,你会惊奇的发现时间不对了,差了有8个小时。
导致这样的原因是Winows和 Linux 对硬件时间的处理方法不同,Windows将硬件时间作为本地时间,而Linux则将硬件时间处理为UTC时间。因此在中国UTC+8时区的情况下使用 Windows 和 Linux 会有八个小时的差异。
解决方案:
Linux命令:
hwclock可以查看硬件时间,
timedatectl可以查看本地时间、UTC时间、时区、是否开启时间同步等信息。
思路:
将两个系统对硬件时间的处理统一化,统一将硬件时间做为本地时间。
Windows时间不做处理,在Linux下处理时间
timedatectl set-local-rtc命令可以将硬件时间 设置为本地时间或UTC时间
如果经过上述设置之后时间显示不正确了,可以通过下列命令同步时间。
当安装好MacOS/Windows双系统后,会出现两个系统时间不一致的现象,总是相差8小时。原因在于这两个系统都是通过读取BIOS中的时间来确定系统时间,但机制不同。
MacOS会把BIOS中的时间作为UTC,即世界标准时间,根据系统中对于时区的设定推算出系统时间;Windows则是直接将BIOS中的时间作为系统时间。而我们所用的北京时间是GMT+8,刚好表现为MacOS的系统时间比Windows快8个小时。
在Windows下通过命令行更改Windows的系统时间确定机制,让Windows和MacOS一样,将BIOS中的时间作为UTC即可。
出现这种情况的原因是由于两种系统在设定时间时均以主板CMOS中的时间为依据,却又使用不同的时间计算标准。具体来说:
Linux和苹果操作系统(UNIX变种)以当前主板CMOS时间做为国际协调时间(UTC), 再根据系统设置的时区来最终确定当前系统时间。比如时区设置为UTC+8(北京时间)而当前CMOS时间为02:00,那么系统会将这两个时间相加,显示 在桌面的当前系统时间为10:00。而Windows 操作系统则直接把CMOS时间认定为当前显示时间,不根据时区转换。
* Windows把系统硬件时间当作本地时间(Local Time),即操作系统中显示的时间跟CMOS中显示的时间是一样的。
* Linux/Unix/Mac把CMOS时间当作UTC,操作系统中显示的时间是硬件时间经过换算得来的,比如说北京时间是UTC+8,则系统中显示时间是CMOS时间+8。
这样,当电脑中同时有多系统时,就出现了问题。假如你的Linux和Windows中设置的时区都为北京时间东八区,而你在Linux中把当前系统时间更 改为10:00,则此时硬件中存储的实际是UTC时间02:00。这时你重启进入Windows后,你会发现windows系统中显示的时间是 02:00,比Linux中慢了八个小时。同理,你在Windows中更改或用网络同步了系统时间后,再到Linux中去看,系统就会快了8小时。那怎么 来解决这种冲突呢?一种就是让Windows把CMOS时间当作UTC,与Linux/Unix /Mac保持一致。另一种就是让Linux/Unix/Mac把系统时间当作本地时间,与Windows保持一致。
一、下面先介绍修改windows的设置,(以Windows7 64-bit为例):
使用组合键Win+R打开运行窗口,输入regedit 回车,找到“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control \TimeZoneInformation”,右键新建New DWORD (32-bit) Value,命名为RealTimeIsUniversal,键值为1
1. windows把硬件时间当作本地时间,也就意味着windows系统中显示的时间和BIOS中显示的时间是一样的。
2. mac把硬件时间当作UTC ,也就意味着mac系统中显示的时间是硬件时间经过换算得到的。显示的时间是硬件时间+时区。例如北京则是硬件时间+8小时
1. 更改windows中注册表
2.设置mac将硬件时间当作本地时间,不作为UTC时间即可。
1. windows系统中的设置
在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\中添加一项数据类型为REG_DWORD,名称为RealTimeIsUniversal,值设为1
或者用命令行:
@echo off
color 0a
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
echo.
echo 已让Windows识别存贮在主板CMOS内的时间为格林威治标准时间(GMT),即系统根据CMOS时间和设置的时区来确定当前系统的时间。
echo.
pause
2. linux系统中的设置
修改/etc/default/rcS,设置不使用UTC时间,设置如下:
UTC=no
3. mac系统中的设置
a. 将时区设置为格林尼治标准时间
b. 将时间调整为当前时间,存储即可。(注意自动设置日期与时间不要打开,否则时间会更改)
Ubuntu和Windows双系统,开发娱乐两不误,随用随切换,岂不美哉?
然而,在美的背后,存在一个让人抓狂的Bug:从一个系统切换到另一个系统后,时间就会出错,表现为——
时差8小时。
例如:
一个系统中时间错乱,尚可通过互联网时间同步(NTP服务器)来解决。但是切换到另一个系统后,时差问题照样如故。
在了解时差出现的原因之前,我们先了解以下几个时钟的概念:
指Linux系统内部的时间。我们在系统任务栏中能直接看到的时间就是系统时间。
实时时钟是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲,它控制着计算机系统的时间。操作系统中所提到的RTC,指的就是在计算机主板控制下的时间,即系统时间,为计算机硬件的内部时钟。
协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
——以上描述摘自 维基百科
实践中,UTC与GMT大致重合,其时间的值基本一致 ,但是它们在本质上各不相同。前者以原子时为依据,是确定时间值的标准,而后者则是时区上的概念,作为世界上不同地区人口生活的时间参照。
UTC也是计算机系统中的一个时间衡量标准,Ubuntu默认就将机器时间视为UTC [1] 。Ubuntu 16.04及更高版本的时间管理工具 timedatectl 中,UTC时间被单独列出来.
CST同时是以下两个时区的英文缩写:
如此缩写相同,在没有明确区分的情况下极易混淆,例如,笔者在小米Max上使用 date 命令查看时区时,输出以下结果:
timedatectl 工具的输出也不会那么明智。如果不知道这两个时区缩写相同,我还真以为系统拿美国的CST作为时区参照,使得这里的CST指的是美国标准时间了。幸好,为了避免歧义,Ubuntu的时区设置界面中特别标明了当前时区相对UTC的时差。
格林尼治平时(英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。
——以上描述摘自 维基百科
在中国,双系统导致的时差不多不少,正好是8个小时。而这8个小时的时差,正是中国所在时区东八区(GMT+8)相对于GMT的时间差。UTC正与GMT重合,加上其又是Ubuntu系统的时间依据(Ubuntu认为机器时间是UTC),因此对于时区设置为东八区的中国用户来说,这八个小时,不多不少,“刚刚好”。
时间不同步的问题,已经是Ubuntu使用上的一个经典问题了,很多前辈都给出了解决办法, 例如CSDN上 @Bruceoxl 的解决方案, 点此浏览 。
笔者参考的就是这篇教程,根据原教程,我在下面给出进一步的解说。
需要注意的是,Ubuntu会自动设置时区和时间,此时如果不进行后续的设置,机器时间就会被改写。本地时间(Local Time)就是我们在系统中使用的时间,它的值虽然正确,但这是以UTC为参照的,与机器时间存在8小时的时差。一旦重启进入仍然将机器时间视为RTC的Windows,则必会导致时间不统一。
自16.04版本起, timedatectl 成为Ubuntu的时间管理工具。不带参数运行时,它会输出当前的时间,以及系统时间的一些配置参数。
以下为设置前的 timedatectl 输出,本地时间为笔者的实际时间,注意观察时差:
第一步:更改硬件时间标准 。为了让Ubuntu能正确显示时间,需要运行以下命令,将硬件时间由UTC改为CST。设置完成后,重启电脑生效:
这里要注意的是,Ubuntu官方其实是不推荐如此设置的。再次运行 timedatectl ,你会发现输出的下方多了一段很长的警告,还加粗了:
意思是:
不过这一警告 我们不必理会 ,毕竟电脑上共存的是两套构造完全不同的系统。
第二步:同步本地时间。 联网打开“Ubuntu设置”→“详细信息”→“日期和时间”,开启前两个选项(“自动设置时间”和“自动设置日期”),稍等片刻。
第三步:同步机器时间。 运行以下命令,将本地时间更新到硬件时间上:
最终设置的结果如下,注意观察时差:
Bruceoxl提供了另一种解决思路,在Windows中设置。打开管理员模式的命令提示符或PowerShell(在 Windows+X 快捷菜单中),输入以下命令 [2] :
原理就是:在注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation 中添加一个名为 RealTimeIsUniversal 的值,类型为 REG_DWORD ,数据为 1 。此项的作用就是让Windows将硬件时间当作UTC,与Ubuntu的默认设置一致。
重启系统后即可生效。
采用上述方法,可完美解决Ubuntu 16.04及以上版本与Windows共存时所造成的时差问题,而时差问题的根源就在于默认情况下两个操作系统对待硬件时间的标准不一致。默认地,Ubuntu会将硬件时间视为UTC,而Windows则将其视为本地时间。
上述两种系统的方法不能同时适用,否则会导致两款系统的时间标准不统一。因为在Ubuntu中,我们是要把默认的机器时间标准从UTC改动出去,但在Windows中却刚好相反。时间标准不统一,造成的后果与适用本教程前一模一样,只是错乱的系统变成了Windows。
同时,若在时间标准不统一的情况下设置系统时间, 还会连同硬件时间也一同产生时差 ,提前或延后八个小时。