Java System.getProperty( “user.timezone” ) 不起作用

2022-09-02 20:49:25

当我启动 java 程序时,java -Duser.timezone="UTC"

System.out.println( System.getProperty( "user.timezone" ) );
System.out.println( new Date() ); // prints time in UTC 

打印UTC时间,但是当我在代码中设置如下:

System.setProperty( "user.timezone", "UTC" );
System.out.println( System.getProperty( "user.timezone" ) );  // prints 'UTC'
System.out.println( new Date() ); // prints time in local zone, not in UTC

不以 UTC 格式打印时间。我需要在代码中设置时间。不寻找乔达

环境: JDK 1.6 / 视窗 XP

请帮忙。非常感谢!


答案 1

你的问题是,早些时候,在JVM启动时,Java已经设置了默认时区,它已经使用原始属性调用。之后只是改变属性本身没有效果。TimeZone.setDefault(...);"user.timezone"System.setProperty("user.timezone", "UTC")

这就是为什么在开始时间设置默认时区的正常方法是:java -Duser.timezone=...

如果坚持以编程方式设置时区,则可以在更改属性后,将默认时区设置为强制重新计算:null

  System.setProperty("user.timezone", "UTC");
  TimeZone.setDefault(null);

从这里开始)。

或者,更简单,更干净,将其显式设置:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

请注意在安全管理器下运行时的潜在问题。


答案 2