如何正确设置 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使用的时区应该是操作系统中指定的时区(我没有在具有JDK和Microsoft Server 2003版本的其他服务器上发现此问题)。

任何想法将不胜感激。


答案 1

你可以传递 JVM 此参数

-Duser.timezone

例如

-Duser.timezone=Europe/Sofia

这应该可以解决问题。设置环境变量 TZ 也可以在 Linux 上解决问题。


答案 2

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

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

到您的

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

推荐