如何正确设置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