Некоторое время назад обнаружили что почти все машины на работе (и не только на работе) для java-программ отображают время со сдвигом на час (меньше чем надо показывают).
Для проверки можно использовать следующее:
public class ShowTime {
public static void main(String... args) {
System.out.println(new java.util.Date());
System.out.println(java.util.TimeZone.getTimeZone("Europe/Moscow")
.useDaylightTime());
} // main
} // class ShowTime
Выглядит результат примерно так:
rodion@rg-home:~/my/java# date
Sat Nov 26 09:01:19 MSK 2011
rodion@rg-home:~/my/java# java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)
rodion@rg-home:~/my/java# java ShowTime
Sat Nov 26 08:01:30 MSK 2011
true
rodion@rg-home:~/my/java#
Заметьте - время в системе 9 утра, а в java - 8 утра. ;-)
С чем это связано идеологически все знают. А если кто-то не знает, как это поправить практически, то можете поступить как-то так:
1) Скачать и запустить официальный апдейтер инфы о таймзонах с ораклового сайта. Вариант хорош тем, что позволяет "пофиксить" время в JVM, не обновляя её. Актуально, скажем, если на работе 50 операторских компов используют java-приложения ещё под java 1.5 и т.п.
2) Можете попробовать обновиться до Java 7u1 или 6u29 - но по-моему это не поможет. Там пакет временных зон 2011g, кажется, а в апдейтере 2011k - возможно, в этом дело.
3) Проблема не будет воспроизводиться если временная зона самой ОС кривая-московская, не обновлённая например в XP SP2. Можно конечно этим воспользоваться... ;-)
P.S. Буду признателен, если сообщите на каких комбинациях OS/JVM у вас найдётся эта проблема. Я фиксил только на Windows/Linux и только 7u0, 7u1, 6u27.
Столкнулся с таким на десктопном дебиане, ява 7u2. Лечил официальным апдейтером.