【问题标题】:Java System.getProperty( "user.timezone" ) does not workJava System.getProperty(“user.timezone”)不起作用
【发布时间】:2013-10-07 22:50:41
【问题描述】:

当我通过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

请帮忙。非常感谢!

【问题讨论】:

  • 这是你的整个main() 代码?
  • 与其摆弄 VM 实例设置,不如使用TimeZone 方法更编程? TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
  • 它们都为我工作(在 JDK 7 中)。
  • @SotiriosDelimanolis : 在设置属性之前尝试调用System.out.println( new Date() );
  • @leonbloy 这打破了它。

标签: java datetime properties timezone system


【解决方案1】:

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

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

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

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

(来自here)。

或者,更简单更简洁,明确设置:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

如果running under a SecurityManager,请注意潜在问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 2021-11-12
    相关资源
    最近更新 更多