通过Java得到的时间与操作系统时间不一致,如何修改Java虚拟机时间?

tiannet 2009-01-06 12:06:46
发现通过System.currentTimeMillis得到的时间与操作系统时间不一致,
一般是什么情况造成的?
如何修改JVM的时间呢?
环境:Windows2003 JDK1.6
...全文
2833 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
aoxiang16888 2011-05-18
  • 打赏
  • 举报
回复
怎么解决啊!没有人回答一下嘛?
tianyu945473925 2011-05-12
  • 打赏
  • 举报
回复
为什么不用System.nanoTime()这个方法呢,这个准确点
diggywang 2011-05-12
  • 打赏
  • 举报
回复
timezone,locale,问题。
其实是一样的时间,你仔细看看清楚就是了。
yanji94521 2011-05-12
  • 打赏
  • 举报
回复
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
起作用么?除非你操作系统不是北京市区,那么这个设置会有效(实质也是错的),如果操作系统是北京市区,那么你设置这个还有效么? JDK找不到北京市区默认就是Asia/Shanghai啊。。

最终原因:JDK没有标准的北京,只有Asia/Shanghai,实质Asia/Shanghai和北京时间一致,但Asia/Shanghai包含了之前几年的夏令机制。想不用下令,请参照楼上的。
yanji94521 2011-05-12
  • 打赏
  • 举报
回复
请先研究好了再说,谢谢!!!
说上海市区的注意了,用1989-4-16 0:0:0 你操作一下时间你会发现不一样的地方(所有夏时令开始第一天都会出现问题),


估计很少人会想这个问题,如果不特殊考虑项目一定会遇到时间问题。如果不想使用夏时令来处理时间,那么改成国际标准时间GMT+8

设置应用的
TimeZone.setDefault(TimeZone.getDefault().getTimeZone("GMT+8"));
或加启动参数
-Duser.timezone=GMT+8
搞定!!
liyueling 2010-10-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 joejoe1991 的回复:]
GMT 格林尼治。
时区不对。换时区。/


Java code
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
[/Quote]

我也遇到同样的问题,太感谢了。
ahongwillbe3 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cyber_bss 的回复:]
②某种条件下,JVM中读取系统时间的时候,是在应用程序启动之后,读一次OS的系统时间,然后JVM中根据CPU ticks来自己计算时间,而不是实时地去OS 取系统时间。
[/Quote]

什么某种情况?!说清楚了。
andycpp 2009-08-06
  • 打赏
  • 举报
回复
回帖拿分
magicyu1986 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cyber_bss 的回复:]
最好能详细提供你的环境,硬件,os,APL服务器,时间差,(8小时?那就是格林尼治时间)大家好帮你分析。

jvm时间和系统时间不一致,大体可能是一下几种情况:
①现象:相差时间整数小时,但不超过24小时。原因:jvm设置的时区不正确,或者启用了夏时令(IBM产品),具体在那里设置需要看使用的是什么APL服务器。
当jvm启动后,加载的系统
②现象:相差非整数小时。某种条件下,JVM中读取系统时间的时候,是在应用程序启动之后,读一次OS的系统时间,然后JVM中根据CPU ticks来自己计算时间,而不是实时地去OS 取系统时间。这样的话,在应用程序运行当中,如果改变了OS的系统时间,那么JVM和OS的系统时间就不一致了。
③第三种及其少见,以至于都忘了。。就记得是一个bug,在某种情况下,会轻微延迟jvm时间,但是积累多了,也很明显。
[/Quote]

学习了
Nc460523019 2009-08-02
  • 打赏
  • 举报
回复
你就是个臭芋头!
joejoe1991 2009-03-27
  • 打赏
  • 举报
回复
GMT 格林尼治。
时区不对。换时区。/

TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
m11062222 2009-03-27
  • 打赏
  • 举报
回复
请问怎么解决啊 谢谢
m11062222 2009-03-27
  • 打赏
  • 举报
回复
用这个确认下是不是不知道os版本:
Properties props=System.getProperties();
Iterator iter=props.keySet().iterator();
while(iter.hasNext())
{
String key=(String)iter.next();
System.out.println(key+" = "+ props.get(key));
}
主要是:
os.name = Windows XP
user.timezone = Asia/Shanghai


有问题 我的显示的是
os.name = Windows XP
user.timezone = GMT
cyber_bss 2009-01-06
  • 打赏
  • 举报
回复
最好能详细提供你的环境,硬件,os,APL服务器,时间差,(8小时?那就是格林尼治时间)大家好帮你分析。

jvm时间和系统时间不一致,大体可能是一下几种情况:
①现象:相差时间整数小时,但不超过24小时。原因:jvm设置的时区不正确,或者启用了夏时令(IBM产品),具体在那里设置需要看使用的是什么APL服务器。
当jvm启动后,加载的系统
②现象:相差非整数小时。某种条件下,JVM中读取系统时间的时候,是在应用程序启动之后,读一次OS的系统时间,然后JVM中根据CPU ticks来自己计算时间,而不是实时地去OS 取系统时间。这样的话,在应用程序运行当中,如果改变了OS的系统时间,那么JVM和OS的系统时间就不一致了。
③第三种及其少见,以至于都忘了。。就记得是一个bug,在某种情况下,会轻微延迟jvm时间,但是积累多了,也很明显。
zrcai 2009-01-06
  • 打赏
  • 举报
回复
一样!!
JavaShooter 2009-01-06
  • 打赏
  • 举报
回复
public class Test {
public static void main(String[] args) {
System.out.println(System.currentTimeMillis());
System.out.println(new Date(System.currentTimeMillis()));
System.out.println(new Date());
}
}
你运行一下上面的程序,看输出的两个日期一样不一样!不应该出现这样的问题吧。
  • 打赏
  • 举报
回复
太强了,从 System.currentTimeMillis 这个就能看出与操作系统的时间不一样来啊?
stefli 2009-01-06
  • 打赏
  • 举报
回复
format the System.currentTimeMillis
then check it
lgh1117 2009-01-06
  • 打赏
  • 举报
回复
学习了
shenqihuan 2009-01-06
  • 打赏
  • 举报
回复
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧