gpt4 book ai didi

java - 如何动态获取系统最新时区?

转载 作者:行者123 更新时间:2023-12-01 22:17:27 26 4
gpt4 key购买 nike

运行此应用程序后,如果我在运行的应用程序之间更改时区,calendar.getTimeZone() 仍然无法获取最新时区,而是显示时间-zone 运行应用程序时存在什么:

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;

public class Test implements Runnable {

public static void main(String[] args) throws InterruptedException {
System.out.println("starting");
Thread.sleep(10000);
new Thread(new Test()).start();
Thread.sleep(5000);
new Thread(new Test()).start();
Thread.sleep(5000);
new Thread(new Test()).start();
Thread.sleep(5000);
new Thread(new Test()).start();
Thread.sleep(5000);
new Thread(new Test()).start();
Thread.sleep(5000);
new Thread(new Test()).start();
}

@Override
public void run() {

Calendar calendar = new GregorianCalendar();
TimeZone t=calendar.getTimeZone();
System.out.println("from run:"+t.getID());
}
}

最佳答案

默认情况下,时区仅在 JVM 启动时设置。如果操作系统时区在应用程序执行期间发生更改,则不会自动转发到 JVM。但您可以强制重新读取当前时区。

以下示例仅在 Windows 环境中按原样进行测试。

  1. 启动TestTimeZone
  2. 在执行期间从控制面板\时钟、语言和区域更改 Windows 时区 - 更改时区

.

import java.util.TimeZone;
import java.util.concurrent.TimeUnit;

public class TestTimeZone implements Runnable {

public static void main(String[] args) throws Exception {
System.out.println("starting");
for (int i = 0; i < 10; i++) {
new Thread(new TestTimeZone()).start();
TimeUnit.SECONDS.sleep(5);
}
}

@Override
public void run() {
TimeZone.setDefault(null);
System.setProperty("user.timezone", "");
System.out.println("current OS timezone: " + TimeZone.getDefault().getID());
}
}

示例输出

current OS timezone    : Europe/Berlin
current OS timezone : Africa/Windhoek
current OS timezone : Europe/Helsinki
current OS timezone : GMT
...

编辑上面的代码也适用于 Linux(以下步骤在 Debian、CentOS 上进行了测试)。

在执行TestTimeZone期间,以root身份执行(在单个步骤之间执行短暂的延迟)。

$ timedatectl set-timezone Europe/Berlin
$ timedatectl set-timezone Africa/Windhoek
$ timedatectl set-timezone Europe/Helsinki
$ timedatectl set-timezone GMT

注意在更改时区之前,请记下您当前的时区。

$ cat /etc/timezone

关于java - 如何动态获取系统最新时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30723195/

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