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

Я пытаюсь запустить программу на Java, но она использует часовой пояс GMT по умолчанию вместо часового пояса, определенного операционной системой. Моя версия 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).

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

108 голосов | спросил Kushal Paudyal 22 MarpmMon, 22 Mar 2010 19:03:24 +03002010-03-22T19:03:24+03:0007 2010, 19:03:24

7 ответов


0

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

-Duser.timezone

Например

-Duser.timezone=Europe/Sofia

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

ответил Bozhidar Batsov 22 MarpmMon, 22 Mar 2010 19:10:39 +03002010-03-22T19:10:39+03:0007 2010, 19:10:39
0

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

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

Твоему

 TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia"));
ответил Ali786 12 Maypm16 2016, 14:23:03
0

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

-Duser.timezone="Europe/Sofia" 

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

-Duser.timezone=Europe/Sofia
ответил WN4yhihiY 4 WedEurope/Moscow2013-12-04T23:31:35+04:00Europe/Moscow12bEurope/MoscowWed, 04 Dec 2013 23:31:35 +0400 2013, 23:31:35
0

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

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

ответил VolkanT 17 J0000006Europe/Moscow 2014, 17:54:56
0

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

mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....."
ответил MichalSv 19 PM00000020000001131 2014, 14:59:11
0

Два варианта, которые, я не думаю, были рассмотрены в других ответах:

Избегайте необходимости

Что бы вы ни делали для установки часового пояса JVM по умолчанию, очень трудно убедиться, что никто другой не установит его по-другому. Он может быть установлен в любое время без уведомления другой части вашей программы или другой программы, работающей в той же JVM. Поэтому в своих временных операциях вы должны четко указывать, какой часовой пояс вы хотите использовать, и вы всегда будете знать, что вы получите, независимо от настроек JVM. Пример:

    System.out.println(ZonedDateTime.now(ZoneId.of("Asia/Dushanbe")));

Пример вывода:

  

2018-10-11T14: 59: 16,742020 + 05: 00 [Азия /Душанбе]

System.setProperty

Для многих целей следующее не будет предпочтительным способом, и его, безусловно, можно использовать не по назначению. Для программ «выбрасывания» я иногда нахожу это практичным. Вы также можете установить системное свойство из 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());
ответил Ole V.V. 11 +03002018-10-11T13:04:03+03:00312018bEurope/MoscowThu, 11 Oct 2018 13:04:03 +0300 2018, 13:04:03
0

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

ответил Dave 18 WedEurope/Moscow2013-12-18T15:04:05+04:00Europe/Moscow12bEurope/MoscowWed, 18 Dec 2013 15:04:05 +0400 2013, 15:04:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132