Два варианта, которые я не думаю, были рассмотрены в других ответах:
Избегайте необходимости
Что бы вы ни делали для установки часового пояса 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());