我正在尝试运行Java程序,但它采用默认的GMT时区而不是OS定义的时区。我的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使用的时区应该是操作系统中指定的时区。 (我没有发现其他具有1.4版JDK和Microsoft Server 2003的服务器的问题。)
任何想法都会受到高度赞赏。
答案 0 :(得分:183)
您可以传递JVM此参数
-Duser.timezone
例如
-Duser.timezone=Europe/Sofia
这应该可以解决问题。 设置环境变量TZ也可以在Linux上实现。
答案 1 :(得分:49)
您还可以使用以下代码在代码中设置默认时区。
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
致你的
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia"));
答案 2 :(得分:20)
上面接受的答案:
-Duser.timezone="Europe/Sofia"
完全不适合我。当我没有关于参数的引号时,我只能成功地更改了我的时区:
-Duser.timezone=Europe/Sofia
答案 3 :(得分:10)
在Windows 7和JDK6上,我必须将-Duser.timezone="Europe/Sofia"
添加到位于"我的计算机=>属性=>高级系统设置=>环境下的JAVA_TOOL_OPTIONS系统变量变量&#34 ;.
如果您已经为JAVA_TOOL_OPTIONS
设置了其他属性,只需附加一个空格然后插入属性字符串即可。
答案 4 :(得分:3)
如果您使用Maven:
mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....."
答案 5 :(得分:2)
我认为其他答案中没有提到的两个选项:
无论您做什么来设置JVM默认时区,都很难确保没有其他人对它进行不同的设置。可以随时进行设置,而无需程序其他部分或运行在同一JVM中的另一个程序的通知。因此,在您的时间操作中,应明确说明所需的时区,并且您将始终知道与JVM设置无关的结果。示例:
System.out.println(ZonedDateTime.now(ZoneId.of("Asia/Dushanbe")));
示例输出:
2018-10-11T14:59:16.742020 + 05:00 [亚洲/杜尚别]
出于许多目的,以下并不是首选的方法,并且肯定会滥用它。对于“扔掉”程序,我有时会发现它很实用。您还可以在Java中设置系统属性:
System.setProperty("user.timezone", "Australia/Tasmania");
System.out.println(ZonedDateTime.now());
这只是打印出来的:
2018-10-11T21:03:12.218959 + 11:00 [澳大利亚/塔斯马尼亚州]
如果要验证传递的字符串,请使用:
System.setProperty("user.timezone", ZoneId.of("Australia/Tasmania").getId());
答案 6 :(得分:0)
在win7中,如果要将正确的时区设置为JRE中的参数,则必须编辑存储在路径deployment.properties
中的文件c:\users\%username%\appdata\locallow\sun\java\deployment
,并添加字符串deployment.javaws.jre.1.args=-Duser.timezone\=
my_time_zone 强>
答案 7 :(得分:0)
设置环境变量TZ
也应该有效
例如:export TZ=Asia/Shanghai