Hallo Leute
Ich habe gerade ein interessantes Problem und würde nur gern wissen, ob das jemand kennt bzw. ob es eine elegante Lösung dafür gibt.
Wir haben eine Oracle 10g-Datenbank, in der u.a. Personendaten mit Geburtsdatum abgelegt sind. Eine Java-Anwendung (Sun JRE 1.6) greift über den JDBC-Treiber von Oracle darauf zu.
Das Problem ist nun, dass bei allen Datumswerten zwischen dem 12.04.1945 und dem 18.11.1945 offenbar eine Stunde abgezogen wird. Aus dem Geburtsdatum „01.06.1945 00:00“ wird also „31.05.1945 23:00“. Oracle speichert immer Timestamps also Datum und Uhrzeit kombiniert. Folge: bei allen Personen, die in diesem Zeitraum geboren sind, wird ein falsches Geburtsdatum angezeigt.
Vermutlich betrifft das Problem auch alle anderen Datumsfelder, nur haben wir halt wenige Felder, in denen Daten, die älter als 20 Jahre sind, eingetragen werden.
Meine Vermutung ist, dass es irgendwie mit einer fehlerhaften Sommerzeit-Umrechnung zusammenhängt. Die Werte werden im Oracle-Client immer korrekt dargestellt, daher vermute ich das Problem entweder im JDBC-Treiber oder im Java selbst. Seltsam ist dabei nur, dass es wirklich nur das Jahr 1945 trifft.
Als Workaround kann ich natürlich bei allen betroffenen Geburtsdaten den Zeitanteil auf mind. 01:00 setzen - dann fällt es nicht auf, dass eine Stunde abgezogen wird, da die Zeit eh nicht angezeigt wird.
Es würde mich aber interessieren, ob jemand einen logische Erklärung für das Problem hat bzw. ob es eine „saubere“ Abhilfe für das Problem gibt.
ach ja - das Property „oracle.jdbc.V8Compatible=true“ ist gesetzt, da die Anwendung noch aus Oracle 7 Zeiten stammt.
lg
Erwin