Linux环境与Windows环境部署程序显示的时间不一致

在项目上驻场研发时遇到一个问题,和Linux与Windows获取时间相关的问题。
问题发生的背景是,一套使用tomcat部署的Java web程序,研发环境在Windows上,测试环境在Linux上。两套程序代码一致,连接同一套oracle数据库。然而,在读取数据库中的数据时,访问研发环境的程序页面,显示的时间数据是正确的。但是访问测试环境的程序时,页面显示的时间是错误的,比研发环境的程序快了12小时。
当时第一反应是两个环境的操作系统时间不一致,然而发现系统时间是一致的。后来想到Linux和Windows两个系统对于时间的计算方式不同,Windows把系统硬件时间当作本地时间(local time),即操作系统中显示的时间跟BIOS中显示的时间是一样的。而Linux把硬件时间当作 UTC,操作系统中显示的时间是硬件时间经过换算得来的。后来想到,这种情况属于在同一台PC上的双系统时间不一致的问题,而且就算是不一致也应该是相差8个小时。 所以问题不在这里,和同事讨论并且搜索了各种材料之后,发现导致该问题发生的原因,应该是Linux的硬件时间和系统时间不一致的问题。
介绍一下Linux的硬件时间与系统时间。
系统时间: 一般说来就是我们执行 date 命令看到的时间,Linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。
硬件时间: 主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。
通过date命令获取系统时间,在用hwclock命令获取硬件时间。结果如下:

硬件时间和系统时间正好相差12个小时。而系统时间才是正确显示的时间。想了想,自己前一天因为发现系统时间快了12个小时,于是手动进行了修改。也并没有重启服务器。这里造成了两个后果,一是导致了系统时间与硬件时间不一致,另一个结果是,因为JVM获取时间的原理导致并不能获取到正确的当前时间,因此导致了这个问题的发生。
于是使用以下命令将硬件时间与系统时间同步:
hwclock --systohc
之后重启了tomcat,问题解决了。


在网上查阅的相关资料:
http://www.360doc.com/content/15/0112/16/15242507_440173299.shtml
http://www.cnblogs.com/shiweifu/archive/2010/12/16/1907653.html
http://blog.chinaunix.net/uid-182041-id-3464524.html
http://blog.csdn.net/velanjun/article/details/8213303
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白码上飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值