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

时间:2013-10-01 17:01:48

标签: java datetime properties timezone system

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

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

请帮忙。非常感谢!

1 个答案:

答案 0 :(得分:23)

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

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

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

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

(来自here)。

或者,更简单,更清洁,直接使用TimeZone.setDefault(...);进行分配。