gpt4 book ai didi

java - 可疑的 JVM 时间行为

转载 作者:行者123 更新时间:2023-12-01 15:45:12 25 4
gpt4 key购买 nike

我的一台机器上遇到了非常奇怪的问题。我编写了一个程序,它监视来 self 们服务器的事件并将其显示在监视计算机上。但是,每个事件状态消息还包含一个由以下调用检索的 TIMESTAMP:

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());

与 公共(public)静态最终字符串DATE_FORMAT_NOW =“yyyy-MM-dd HH:mm:ss”;

我期待这个调用返回本地时间,直到今天为止,该时间一直运行良好。但现在我的程序向我显示每个传入事件的本地时间 +3 小时。重新启动 jar 文件根本没有帮助,并且系统时间也设置正确。该程序正在一台机器上运行,该机器正在将其时间与中央公司时钟同步。

任何人都可以向我解释上述行为和/或说明一个可能的解决方案,而不是“重新启动计算机并重试”:-) 吗?

悬崖:- 当我启动程序时,时间检索正在我的或任何其他机器上运行- 目标机器 24/7 全天候运行,并且只是一台监控机器,因此没有人更改那里的任何选项- 直到今天为止都运行良好。- 主机系统 (Windows XP) 上的所有时间/时区设置均正确。 (通过 CMD ->“日期”以及系统偏好设置进行检查)

我很感谢对此问题的任何回答。感谢您的宝贵时间!

<小时/>

问题自 25 日起已得到解答。我已经实现了 Timezone.setDefault() 的显式调用,以确保始终显示正确的时区。我现在就结束这个问题。

谢谢大家的回答!

最佳答案

这段代码:

cal.getTime()

返回 Date目的。一个Date对象只是 UTC 时间的包装器,如 long 。在您向我们展示的代码中,执行 sdf.format(new Date()); 也是正确的。

格式DATE_FORMAT_NOW是什么? ?我假设您自己指定了这一点。您是否以这种格式指定时区?

编辑 正如您在评论中提到的,DATE_FORMAT_NOW 未指定时区。你应该同时做 Timezone.getDefault()sdf.getTimezone()查看该值是否已更改为您的区域设置 + 3 小时。

编辑2我发现this forum post关于时间偶尔发生变化。在本例中,这是由 Oracle 驱动程序调用 Timezone.setDefault(...) 引起的。在一个方法的中间,然后将其设置回来。

关于java - 可疑的 JVM 时间行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7186643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com