如何正确设置JVM时区

我试图运行一个Java程序,但它采取了一个默认的GMT时区,而不是一个操作系统定义的时区。 我的JDK版本是1.5,操作系统是Windows Server Enterprise(2007)

Windows有一个中央时区指定,但是当我运行下面的程序,它给了我一个GMT时间。

import java.util.Calendar; public class DateTest { public static void main(String[] args) { Calendar now = Calendar.getInstance(); System.out.println(now.getTimeZone()); System.out.println(now.getTime()); } } 

这是输出

 sun.util.calendar.ZoneInfo[id="GMT", offset=0, dstSavings=0, useDaylight=false, transitions=0, lastRule=null] Mon Mar 22 13:46:45 GMT 2010 

请注意,我不想从应用程序中设置时区。 我希望JVM使用的时区应该是OS中指定的时区。 (我没有发现与JDK和Microsoft Server 2003版本1.4的其他服务器的这个问题)。

任何想法将不胜感激。

你可以通过JVM这个参数

 -Duser.timezone 

例如

 -Duser.timezone=Europe/Sofia 

这应该是诀窍。 设置环境variablesTZ在Linux上也有窍门。

您还可以使用以下代码在代码中设置默认时区。

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

给你

  TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia")); 

上面接受的答案:

 -Duser.timezone="Europe/Sofia" 

没有完全为我工作。 当我没有引用参数时,我只能成功地更改我的时区:

 -Duser.timezone=Europe/Sofia 

在Windows 7和JDK6上,我必须将-Duser.timezone="Europe/Sofia"到位于“我的电脑=>属性=>高级系统设置=>环境variables”下的JAVA_TOOL_OPTIONS系统variables。

如果您已经为JAVA_TOOL_OPTIONS设置了其他一些属性,只需添加一个空格,然后插入属性string即可。

如果您使用Maven :

 mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....." 

在win7中,如果你想在JRE中设置正确的时区作为参数,你必须编辑保存在pathc:\users\%username%\appdata\locallow\sun\java\deployment添加stringdeployment.javaws.jre.1.args=-Duser.timezone\= my_time_zone