当我按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
请帮忙。非常感谢!
答案 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(...);
进行分配。