new Date() 和实际时间差8小时的问题

 

记得以前new Date时间是对的,今天突然发现运行Date now = new Date()时,获取出来的时间比系统的时间少8小时。
双击系统任务栏(os为xp sp2)的时间,在日期和时间属性窗口中查看时区没有问题,是(GMT+8:00) 北京....等等。
但是通过java代码:
System.out.println(System.getProperty("user.timezone"));打印出来的却是GMT,在网络上查询了一下,发现很多人说是因为注册表损坏,
可以通过导入别的系统的注册表的方式来解决的,注册表项的位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
把自己系统的该项注册表导出,并从网络上下载别人的声称可以解决该问题的注册表,对比之后发现:
注册表里北京时区的这些值都是一样的,如下,估计我系统的该项注册表没有问题,就没有导入那个从网络下载的该项注册表。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\China Standard Time]
"Display"="(GMT+08:00) 北京,重庆,香港特别行政区,乌鲁木齐"
"Dlt"="中国夏季时间"
"Std"="中国标准时间"
"MapID"="-1,75"
"Index"=dword:000000d2
"TZI"=hex:20,fe,ff,ff,00,00,00,00,c4,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

由于System.out.println(System.getProperty("user.timezone"));打印出来的是GMT,正确的应该是GMT+08:00,
直接添加jvm参数:-Duser.timezone=GMT+8,可以解决这个问题

后来又发现通过如下方式也可以解决这个问题:
双击系统任务栏(os为xp sp2)的时间,在日期和时间属性窗口中修改时区为别的任意时区,保存,
打印System.out.println(System.getProperty("user.timezone"));,如果和你修改的那个时区值一致,再修改为北京所在的GMT+08时区,
就能打印出GMT+08:00了,问题也就解决了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值