18

当我启动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 / Windows XP

请帮忙。非常感谢!

4

1 回答 1

30

您的问题是,早些时候,在 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"));

如果在 SecurityManager 下运行,请注意潜在问题。

于 2013-10-01T17:10:21.240 回答