gpt4 book ai didi

修改主机操作系统默认值后,Java 检测时区

转载 作者:搜寻专家 更新时间:2023-10-31 20:17:43 25 4
gpt4 key购买 nike

我有一个简单的 Java Executor线程运行。这只是检测时区并显示。

代码如下:

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {

TimeZone.setDefault(null);
//get Calendar instance
Calendar now = Calendar.getInstance();

//get current TimeZone using getTimeZone method of Calendar class
TimeZone timeZone = now.getTimeZone();

//display current TimeZone using getDisplayName() method of TimeZone class
System.out.println("Current TimeZone is : " + timeZone.getDisplayName());
System.out.println( System.getProperty( "user.timezone" ) );

}
}, 0, 10, TimeUnit.SECONDS);

问题是,如果我单独使用控制面板手动修改时区。我的时区没有更新。

我读过一篇解释 JVM 时间问题的帖子 Java System.getProperty( "user.timezone" ) does not work

现在我需要检测系统时区变化

最佳答案

根据最新评论,我为您提供了一个解决方法。

问题或多或少:JVM 进程不会注意到时区更改时,因此询问 JVM 不会给您所需的信息。这就是为什么人们建议您编写一些 native (C/C++) 代码,并从 JVM 内部调用它来查询 Windows 内部结构。

这绝对应该有效,但是将所有元素整合在一起......以一种稳健/正确的方式将很困难(即使对于超出“初学者”水平的人也是如此)。

因此,一些其他想法:不要使用“ native ”代码来查询时区。相反,您可以调用一些脚本来执行此操作;你 grep 它的输出并更新你的设置。

你可以用 python 做到这一点,或者直接使用 powershell .

因此,您的 Java 代码将使用 ProcessBuilder 来运行某些命令;然后您只需从该进程的输出流中读取以获取具有当前(新)时区的字符串。

可能不是世界上最强大的解决方案;但至少:快速实现一些首次测试。

理论上你也可以尝试运行一个Java类来打印时区;这将具有免费获取新时区的真实 Java 名称的不错优势!

当然,要记住其他方面:您必须确保所有您的代码都知道时区可以更改!

关于修改主机操作系统默认值后,Java 检测时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40129225/

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