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

当我通过java -Duser.timezone="UTC"启动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

请帮忙。 非常感谢!

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

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

如果您坚持以编程方式设置时区,则可以在调用System.setProperty( "user.timezone", ... )默认时区设置为null ,以强制重新计算:

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

(从这里 )。

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