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