记得以前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了,问题也就解决了。