Новая дата (длинная) дает разные результаты

Когда я запускаю этот код:

System.out.println( "XXX date=" + new Date( 1311781583373L ) );

Я получаю этот результат в Eclipse JUnit runner:

XXX date=Wed Jul 27 16:46:23 GMT+01:00 2011

и этот результат в Maven из командной строки:

XXX date=Wed Jul 27 17:46:23 CEST 2011

Как вы можете видеть, час отличается.

(тот же компьютер, такая же версия Java, может быть, 30 секунд). Почему?

[EDIT] Также часовой пояс отличается. Почему Java использует CEST, когда она начиналась с Maven и GMT+01:00 при запуске из Eclipse?

Или иначе: как я могу заставить Java использовать либо?

Ответ 1

Чтобы указать часовой пояс по умолчанию, вы можете установить системное свойство user.timezone. Вы можете сделать это, передав его как аргумент JavaVM (вам может потребоваться изменить эквивалентный конфигурационный файл eclipse.ini или Maven):

-Duser.timezone=<your preferred timezone>

... или путем его программного программирования:

 System.setProperty("user.timezone", "<your preferred timezone>");

Или, если это удобно, вы можете указать часовой пояс, который вы используете каждый раз при распечатке даты:

DateFormat myDateFormat = new SimpleDateFormat("<insert date format string here>");    
myDateFormat.setTimeZone(TimeZone.getTimeZone("<your preferred timezone>")); 
....
System.out.println(myDateFormat.format(yourDate));

Ответ 2

Похоже, что Maven и Eclipse выбрали разные часовые пояса по умолчанию, что все.

Не забывайте, что Date.toString() использует часовой пояс по умолчанию. Я лично предпочел бы использовать Joda Time и, вероятно, зарегистрировать значение UTC вместо локального времени:)

Ответ 3

Добавить

System.out.println(TimeZone.getDefault().getDisplayName());

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

$ java -Duser.language=fr -Duser.country=CA

В Maven вы можете использовать переменную среды MAVEN_OPTS. Кроме того, здесь - статья, в которой описывается, как постоянно менять свой язык в Windows.