Java - data zapisana jak poprzedniego dnia

Doświadczam bardzo dziwnego zachowania podczas zapisywania dat w bazie danych. Na moim serwerze (Linux centOS 6.2) używam serwera aplikacji glassfish (3.1.1 - kompilacja 12) i Java (1.7.0_09), aplikacja jest rozwijana w Javie + GWT i używa serwera PostgreSQL (9.2.1). Wewnątrz aplikacji znajduje się kilka pól daty zapisanych w db. Pola daty używają datepicker (http://code.google.com/p/gwt-datepicker, r30).

Atrybut daty relacji db to typ daty (nie znacznik czasu). Niektóre daty są zapisywane dzień wcześniej w bazie danych. Problem występuje tylko dla dat między przedziałami, np. między 31.03.1968 a 27.10.1968, co sprawia, że ​​myślę o problemie z czasem letnim. Ale ponieważ na przykład nie zdarza się to w 1969 r., Nie mogę dobrze wyizolować problemu. Próbuję znaleźć jakiś inny przedział czasu, w którym problem występuje.Na przykład, jeśli wybiorę 19.05.1968 w aplikacji, po zapisaniu w bazie danych data zostanie zapisana jako 18.05.1968.

Dziwne jest to, że mam inną istotę tej samej aplikacji na innym serwerze i dla tych samych dat są one poprawnie zapisywane. To sprawia, że ​​myślę, że problem może polegać albo na:

konfiguracja szklistka;java (implementacja java.util.Date?);brakuje mi konfiguracji serwera

Próbowałem ustawić w Europie / Rzymie (moja strefa czasowa) każdą możliwą konfigurację mojego serwera, ale nic. Dowolny pomysł? Jak mogę rozwiązać lub zbadać ten problem?

AKTUALIZACJA: Rok 1968 był rokiem przestępnym. Problem występuje również w 1972 r., Który jest ponownie rokiem przestępnym. Zreasumowanie:problem „data uratowana-jeden dzień przed” pojawia się w latach przestępnych w okresie letnim.

Część kodu, w której tworzona jest data oject:

Date d = dateField.getSelectedDate();
if (d != null) {
    txtVal = DateTimeFormat.getFormat("dd/MM/yyyy").format(d);
}

gdzie dateField jest zadeklarowane jako:

transient private DatePicker dateField;

Pakiet jestorg.zenika.widget.client.datePicker.DatePicker (wspomniany wcześniej gwt-datepicker-r30), a DateTimeFormat odnosi się docom.google.gwt.i18n.shared.DateTimeFormat

AKTUALIZUJ po zaakceptowaniu odpowiedzi:

Użyłem tego obejścia: kiedy tworzę datę, używam następującego kodu:

final long hours12 = 12L * 60L * 60L * 1000L;
Date d = new Date(d1.getTime() + hours12);

questionAnswers(3)

yourAnswerToTheQuestion