Я пытаюсь запустить программу на Java, но по умолчанию используется часовой пояс GMT, а не часовой пояс, определенный ОС. Моя версия JDK - 1.5, а ОС - Windows Server Enterprise (2007).
В Windows указан часовой пояс Central, но когда я запускаю следующую программу, она показывает время по Гринвичу.
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).
Любые мысли будут высоко оценены.
DateTest
класс?-Duser.timezone
значениеОтветы:
Вы можете передать JVM этот параметр
Например
и это должно помочь. Установка переменной окружения TZ также помогает в Linux.
источник
Вы также можете установить часовой пояс по умолчанию в своем коде, используя следующий код.
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Вашему
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Sofia"));
источник
Принятый ответ выше:
-Duser.timezone="Europe/Sofia"
У меня точно не получилось. Я смог успешно изменить свой часовой пояс только тогда, когда у меня не было кавычек вокруг параметров:
источник
На окнах 7 и JDK6, мне пришлось добавить
-Duser.timezone="Europe/Sofia"
к JAVA_TOOL_OPTIONS системной переменной , расположенной в разделе «Мой компьютер => Свойства => Переменные Дополнительные параметры системы => Окружающая среда».Если у вас уже есть какое-то другое свойство,
JAVA_TOOL_OPTIONS
просто добавьте пробел, а затем вставьте строку свойства.источник
Если вы используете Maven :
mvn -Dexec.args="-Duser.timezone=Europe/Sofia ....."
источник
mvn spring-boot:run -Drun.jvmArguments="-Duser.timezone=UTC"
для Spring Boot v1.Два варианта, которые, как мне кажется, не были рассмотрены в других ответах:
Избегайте необходимости
Что бы вы ни делали, чтобы установить часовой пояс JVM по умолчанию, очень сложно убедиться, что никто другой не установит его иначе. Его можно установить в любое время без уведомления из другой части вашей программы или из другой программы, работающей в той же JVM. Поэтому в ваших временных операциях четко указывайте, какой часовой пояс вы хотите, и вы всегда будете знать, что получите, независимо от настройки JVM. Пример:
System.out.println(ZonedDateTime.now(ZoneId.of("Asia/Dushanbe")));
Пример вывода:
System.setProperty
Для многих целей следующий способ не будет предпочтительным и, безусловно, может быть использован неправильно. Для программ «выбросить» я иногда нахожу это практичным. Вы также можете установить системное свойство из Java:
System.setProperty("user.timezone", "Australia/Tasmania"); System.out.println(ZonedDateTime.now());
Это только что напечатано:
Если вам нужна проверка передаваемой строки, используйте:
System.setProperty("user.timezone", ZoneId.of("Australia/Tasmania").getId());
источник
В win7, если вы хотите установить правильный часовой пояс в качестве параметра в JRE, вам нужно отредактировать файл,
deployment.properties
хранящийся в пути,c:\users\%username%\appdata\locallow\sun\java\deployment
добавив строкуdeployment.javaws.jre.1.args=-Duser.timezone\=
my_time_zoneисточник
Установка переменной среды
TZ
также должна работатьпример:
export TZ=Asia/Shanghai
источник