16 Stimmen

JPA TemporalType.Date liefert falsches Datum

Ich habe eine Klasse, die ein Datumsfeld hat, das ein "Gültig von"-Datum für einen Teil der Daten darstellt. Es ist wie folgt definiert:

@Temporal( TemporalType.DATE )
private Date validFrom;

Alles scheint gut zu funktionieren, bis zu dem Punkt, an dem ich das Datum aus der Datenbank ziehe und es anzeige. Wenn ich das Datum 18-Sep-2003 im Frontend auswähle und es dann speichere, wenn ich in der Datenbank nachsehe, wird das Datum auch gehalten (Datenbank ist MySQL 5.5.9, Spaltentyp ist DATE). Wenn ich jedoch eine Liste von Datensätzen aufrufe, ist das angezeigte Datum der 17. September 2003 - ein Tag früher.

Wenn ich ein frühes oder spätes Datum im Jahr wähle, wie den 26. März 2003 oder den 25. Dezember 2003, ist alles in Ordnung, so dass ich vermute, dass dies etwas mit der Sommerzeit zu tun hat, aber wo schleicht sich der Fehler ein? Da die Datenbank das korrekte Datum zu enthalten scheint, vermute ich, dass es daran liegt, dass JPA zurück in ein java.util.Date konvertiert - ist java.util.Date die beste Klasse, die man für ein Datum verwenden kann? Ich habe ein paar Beispiele gesehen, wo Menschen Kalender verwenden, aber das scheint ziemlich schweres Gewicht und ich bin nicht sicher, wie gut es mit einem JSF-basierten Frontend funktionieren wird.

1voto

Robert Niestroj Punkte 14014

Ich hatte das gleiche Problem mit SQL Server. Das Problem war ein alter SQL JDBC-Treiber. Ich hatte sqljdbc4.jar vom April 2010, das mit SQL 2000 kompatibel war und das Problem mit Daten hatte, die ein oder zwei Tage zurücklagen. Nach einem Update auf den neuesten Treiber oder sogar auf einen von 2012 war das Problem verschwunden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X