Ответ 1
Ваша проблема в том, что раньше, при запуске JVM, Java уже установил часовой пояс по умолчанию, он вызвал TimeZone.setDefault(...);
, используя исходное свойство "user.timezone"
. Просто изменение свойства после System.setProperty("user.timezone", "UTC")
само по себе не влияет.
Вот почему нормальный способ установить часовой пояс по умолчанию во время запуска: java -Duser.timezone=...
Если вы настаиваете на настройке часового пояса программно, вы можете после вызова System.setProperty( "user.timezone", ... )
установить часовой пояс по умолчанию на null
, чтобы заставить его пересчитать:
System.setProperty("user.timezone", "UTC");
TimeZone.setDefault(null);
(из здесь).
Или, проще и чище, назначьте его непосредственно с помощью TimeZone.setDefault(...);
.