前一阵子更新了系统,鸟枪换炮地装上了WIN7,可是项目却出现了莫名其妙的问题。我这个项目的客户端启动之后会从服务端获取系统时间,然后更新本地时间。但我发现每次启动客户端后,本地时间都会被改为8小时之前。起初我以为是服务器上系统时间错了,也就没管,一直以8小时前的本地时间进行调试。但是当这影响了我的作息时间,导致下班延后给人一种主动加班的表象时,我无法容忍了,决定到服务器上一看究竟。
这一看让我大跌眼镜(好吧,尽管我不带眼镜)——服务器时间是正确的。那问题究竟在哪里呢?于是设置断点,开始调试。当断点运行到
check.setSystemTime(new Date());
时,查看check对象的systemTime字段的值,居然是传说中的格林威治时间——8小时前。。。
也就是说new Date()出来的不是系统时间,是不是时区出问题了呢?一测试,果然。看下面的代码:
Date date = new Date(); System.out.println(date.toString()); Calendar calendar = Calendar.getInstance(); System.out.println(calendar.getTime()); System.out.println(System.getProperty("user.timezone")); System.out.println(System.getProperty("user.country"));
结果如下:
Wed May 11 02:08:55 CST 2010 Wed May 11 02:08:56 CST 2010 GMT CN
也就是说,系统的时区出现了问题。但是系统时区是完全正确的,
问题究竟出在哪里呢?
会是环境不兼容吗?
我的JDK是1.5版本,会不会是JDK太旧与WIN7不兼容,于是在获取当前时区时出现异常而默认取到了GMT呢?于是同样的环境在其他机器上测试,居然完全没问题。而且在网上搜索发现,在Java BUG的数据库中也早已有人报告了这个错误(但是一直没有解决),其中有人是XP,有人是2003。看来不是环境的问题了。
会是注册表的问题吗?
我们知道在注册表HLM\software\microsoft\window nt\currentversion\time zones下有关于各个时区的配置,会不会是由于安装了某个程序把这些配置破坏了呢?于是我从没有问题的机器上导出了一份该节点的注册表,导入到我的机器,奇迹出现了。。。
吗?
答案是没有,问题依旧。
会是人品问题吗?
还真有这个可能。同样的环境别人的机器没问题,而我的不行,不是RPWT是什么?但我是不相信宿命的。笼统上说环境大致相同,但肯定会有微小的差别,这种微小的差别是无法测评的。
实在没有办法,不得不求助于CSDN,有几位大牛耐心地帮我分析了问题,并提出了一些解决方案。
瞒天过海法
既然在目前的项目中只有我一台机器有这个问题,也许在这台机器上做点手脚就可以漫天过海了。
在Eclipse中打开Run对话框的Arguments选项卡,在VM arguments框的后面加入如下的参数:
-Duser.timezone=Asia/Shanghai
这样在调试或运行程序时,就会先更改时区。由于是本地的配置,不会对其他机器造成影响。
最终“解决方案”
也许重装系统可以解决,但是我懒,不愿重装。那么没有办法,只有升级JDK了。把1.5卸载,安装1.6,修改一下环境变量,再运行之前的程序,OK,整个世界终于清静了。
但是,问题的症结何在?
这篇文章摘抄别人的。想进去的点这个链接:点我、点我
相关推荐
世界范围内的时区列表。由 java.util.TimeZone 类导出
主要介绍了java转换时区时间过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1. 获取时区时间 public static ZonedDateTime getNow(int offset) 2. 解析指定时间 public static ZonedDateTime parse(String date,String dateFormat,int offset) 3. 获取某一天的零点 public static ...
注册表文件 博文链接:https://lrz0534.iteye.com/blog/222887
注册表备份 博文链接:https://hanpang8983.iteye.com/blog/544519
NULL 博文链接:https://hoochiang.iteye.com/blog/1848534
TimeZone可以用来获取或者规定时区,也可以用来计算时差,这里我们就来详解Java中的时区类TimeZone的用法,特别要注意下面所提到的TimeZone相关的时间校准问题.
服务器时区错误1
NULL 博文链接:https://chwshuang.iteye.com/blog/947220
在win7下装JDK1.4和JDK1.5、eclipse,输出系统时区和时间。 果然,输出时区为"GMT",时间差8小时。[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Time Zones/China Standard Time]。 有一个...
车机导航时间时区错误修正,修复车机上时区错误,导致的高德导航时间错误
主要介绍了java时区转换的理解及示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Java初学者练习题,使用if else循环完成,可对初学者提供一定的参考。
主要介绍了Java对世界不同时区timezone之间时间转换的处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
1. 查看当前时区 # vi /etc/sysconfig/clock 2. 修改设置时区 方法(1) # tzselect 方法(2 仅限于RedHat Linux 和 CentOS) # timeconfig 3. 复制相应的时区文件,替换系统默认时区 # cp /usr/share/zoneinfo/$主...
IDEA连接mysql报时区serverTimezone错误 解决方案
说起java中的时间,大家或许都很熟悉,朗朗上口的Date、Calendar、SimpleDateFormat等。但是大家对他们的认识真的很深刻吗?我要想大家说的是TimeZone,即时区。 经常有人发现时间不对,比如相差8个小时等等,其...
新的日期和时间 API: 探讨 Java 8 中新增的日期和时间 API,以及如何使用这些 API 来处理日期、时间和时区等相关操作。 并发编程改进: 讨论 Java 8 中对并发编程的改进,包括 CompletableFuture、新的并发工具和...