Как правильно установить JVM TimeZone

Я пытаюсь запустить Java-программу, но она использует часовой пояс по умолчанию, а не часовой пояс, определенный ОС. Моя версия JDK - 1,5, а ОС - Windows Server Enterprise (2007)

В Windows указан центральный часовой пояс, но когда я запускаю следующую программу, она дает мне время по Гринвичу.

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).

Любые мысли будут высоко оценены.

Ответ 1

Вы можете передать JVM этому параметру

-Duser.timezone

Например

-Duser.timezone=Europe/Sofia

и это должно сделать трюк. Установка переменной окружения TZ также делает трюк в Linux.

Ответ 2

Вы также можете установить часовой пояс по умолчанию в своем коде, используя следующий код.

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

To Yours

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

Ответ 3

Принятый ответ выше:

-Duser.timezone="Europe/Sofia" 

Не работает для меня точно. Я только смог успешно изменить свой часовой пояс, когда у меня не было котировок вокруг параметров:

-Duser.timezone=Europe/Sofia

Ответ 4

В Windows 7 и JDK6 мне пришлось добавить -Duser.timezone="Europe/Sofia" в системную переменную JAVA_TOOL_OPTIONS, расположенную в разделе "Мой компьютер = > Свойства = > Расширенные настройки системы = > Переменные среды".

Если у вас уже есть другое свойство, установленное для JAVA_TOOL_OPTIONS, просто добавьте пробел, а затем вставьте строку свойства.

Ответ 5

Если вы используете Maven:

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

Ответ 6

В win7, если вы хотите установить правильный часовой пояс в качестве параметра в JRE, вы должны отредактировать файл deployment.properties, хранящийся в пути c:\users\%username%\appdata\locallow\sun\java\deployment, добавив строку deployment.javaws.jre.1.args=-Duser.timezone\= my_time_zone