Linux和win7(10)双系统时间错误问题 时间相差8小时

本文解析了Windows与Linux/Unix/Mac系统中硬件时间处理的差异,导致多系统环境下时间显示不一致的问题。提供了两种解决方案:一是调整Ubuntu系统不使用UTC时间,与Windows保持一致;二是修改Windows对硬件时间的处理方式,使其视为UTC时间,从而实现时间同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:

https://www.cnblogs.com/shareidea/p/5465306.html

https://blog.youkuaiyun.com/lujun9972/article/details/46003097

 

Windows把系统硬件时间当作本地时间(local time),即操作系统中显示的时间跟BIOS中显示的时间是一样的。 www.2cto.com

Linux/Unix/Mac把硬件时间当作 UTC,操作系统中显示的时间是硬件时间经过换算得来的,比如说北京时间是GMT+8,则系统中显示时间是硬件时间+8。

这样,当PC中同时有多系统共存时,就出现了问题。


假如你的linux设置的时区都为北京时间东八区,当前系统时间为9:00AM。则此时硬件中存储的实际是UTC 时间1:00AM。这时你重启进入Windows后,你会发现windows系统中显示的时间是 1:00AM,比linux中慢了八个小时。同理,你在Windows中更改或用网络同步了系统时间后,再到linux中去看,系统就会快了8小时。 在实行夏令时的地区,情况可能会更复杂些。


解决这个问题的方法:


1. 可让 Ubuntu 不使用 UTC 时间与 Windows 保持一致。

ubuntu默认开启UTC,即协调世界时,而win7是使用这种计时方式,这将导致的结果就是Windows和Ubuntu时间计算 有差异

你可以使用以下方法得到一致的时间:

sudo gedit /etc/default/rcS

找到这一行:UTC=yes www.2cto.com

把 yes改为no

在fedora(我是fedora 13)下,一次打开System–>Administration–>Date & Time在Time Zone选项卡下把System clock uses UTC前面的勾去掉,确定。稍微过几分钟系统时间就正常了。


2. 修改 Windows 对硬件时间的对待方式,这样只在 Windows 上修改后就无需在Ubuntu 上设置了。

让 Windows 把硬件时间当作 UTC

开 始->运行->CMD,打开命令行程序(Vista则要以管理员方式打开命令行程序方可有权限访问注册表),在命令行中输入下面命令并回车

代码:

  Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

 

 

用户的测试机安装的win7,本人用的是 WEBLOGIC8.1 JDK1.4的。 测试时发现时间总是差8小时,郁闷死。 立马想到时区不对,查看控制面板里时区设置(顺便BS一下win7,控制面板就不能学xp有个经典模式吗?郁闷死),发现时区设置正确,看来不是时区设置问题。 在win7下装JDK1.4JDK1.5、eclipse,输出系统时区时间。 果然,输出时区为"GMT",时间8小时。那就说明是jdk1.5在win7下取不到正确的时区。 什么原因呢,为了验证我的假设,又下了最新的jdk1.6,后台打印输出正常。 问题找到了,接下来就要解决。为什么xp下能取到时区儿而win7下取不到呢? 搜索一下,到SUN论坛,发现SUN提到了这个bug,(http://java.sun.com/javase/tzupdater_README.html)而且发布了一个tzupdater。 按照使用说明下载、运行,再试,还是不行。 虽然用updater没有成功,但通过他的使用说明还是发现了一些东东。在/jdk1.5.0_04/jre/lib目录下有个tzmappings文件。 用记事本打开,里面记录了所有地区的时区,格式为“China Standard Time:-1,75::Asia/Shanghai:”,看到它,很自然的联想到注册表。 于是,打开注册表时区的节点[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Time Zones/China Standard Time]。 有一个键值似曾相识,“MapID=-1,75”,这不就是tzmappings文件中记录的那个值吗。 会不会Java是通过这个键值获取的时区?展开win7下注册表相同的节点,我靠,里面竟然没有MapID键, 与xp对比了一下,少了MapID、Index键,多了MUI_Display、MUI_Dlt、MUI_Std啥的, 其他的不管,先把MapID键加上再说。加上后,再运行我那个取系统时间的测试程序,OK!问题解决! 本同目录下有两个注册表。一个是中国的 。一个是时区全的。那个都行。 其实本人也是参考优快云部分帖子,再有疑问联系,优快云:lawsystem 感谢 优快云 无名贡献者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值