Java System.getProperty( "user.timezone" ) не работает

Когда я запускаю java-программу на java -Duser.timezone="UTC",

System.out.println( System.getProperty( "user.timezone" ) );
System.out.println( new Date() ); // prints time in UTC 

печатает время UTC, но когда я устанавливаю код следующим образом:

System.setProperty( "user.timezone", "UTC" );
System.out.println( System.getProperty( "user.timezone" ) );  // prints 'UTC'
System.out.println( new Date() ); // prints time in local zone, not in UTC

не печатает время в UTC. Мне нужно установить время в коде. Не ищите Йоду

Среда: JDK 1.6/Windows XP

Пожалуйста, помогите. Большое спасибо!

Ответы

Ответ 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(...);.