当我启动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=...
如果您坚持以编程方式设置时区,则可以在更改属性后将默认时区设置为null
强制重新计算:
System.setProperty("user.timezone", "UTC");
TimeZone.setDefault(null);
(from here https://stackoverflow.com/questions/7268013/eclipse-rcp-application-log-view-change-set-timezone-for-messages-sent-to-the-e/10371301#10371301).
或者,更简单、更清晰,将其设置为显式:
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
如果发生以下情况,请注意潜在的问题:在 SecurityManager 下运行 https://stackoverflow.com/a/9891971/277304.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)