Подозрительное поведение времени JVM - PullRequest
0 голосов
/ 25 августа 2011

У меня совершенно странная проблема на одной из моих машин. Я написал программу, которая отслеживает события с наших серверов и отображает их на ПК мониторинга. Однако каждое сообщение о состоянии события также содержит TIMESTAMP, который извлекается следующими вызовами:

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());

с public static final String DATE_FORMAT_NOW = "гггг-мм-дд чч: мм: сс";

Я ожидаю, что этот звонок вернет местное время, которое до сегодняшнего дня прекрасно работало. Но теперь моя программа показывает мне местное время +3 часа на каждом входящем событии. Перезапуск файла JAR не помогает вообще, и Системное время также настроено правильно. Эта программа работает на машине, которая синхронизирует свое время с центральными корпоративными часами.

Может кто-нибудь объяснить мне упомянутое поведение и / или заявить о возможном решении, которое не является «перезагрузите компьютер и попробуйте снова» :-)?

Cliffs: - Время запуска работает на моем или любом другом компьютере, когда я запускаю Программу - Целевая машина работает 24/7 и является только машиной мониторинга, поэтому никто не меняет там никаких опций - До сегодняшнего дня все работало нормально. - Все настройки времени / часового пояса на хост-системе (Windows XP) верны. (проверяется через CMD -> «date», а также через Системные настройки)

Я ценю любой ответ на этот вопрос. Спасибо за ваше время!


Вопрос ответили уже с 25. Я реализовал явный вызов Timezone.setDefault (), чтобы убедиться, что правильный часовой пояс отображается все время. Я закрою этот вопрос сейчас.

Спасибо всем за ответы!

1 Ответ

1 голос
/ 25 августа 2011

Этот код:

cal.getTime()

Возвращает объект Date.Объект Date - это просто оболочка для времени UTC как long.В коде, который вы нам показали, так же правильно сделать sdf.format(new Date());

Что такое формат DATE_FORMAT_NOW?Я полагаю, вы сами уточняете это.Вы указываете часовой пояс в этом формате?

EDIT Как вы упомянули в своем комментарии, DATE_FORMAT_NOW не указывает часовой пояс.Вы должны сделать Timezone.getDefault() и sdf.getTimezone(), чтобы увидеть, изменилось ли значение на ваш язык + 3 часа.

EDIT2 Я нашел это сообщение на форуме овремя от времени меняется.В этом случае это было вызвано драйвером Oracle, вызывающим Timezone.setDefault(...) в середине метода, а затем устанавливающим его обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...