mental.dIseASe
Lieutenant
- Registriert
- Dez. 2008
- Beiträge
- 671
Hallo zusammen,
ich wundere mich gerade über den folgenden Unterschied bei der Datumsarithmetik in Oracle:
Wenn ich mit einer Zeitspanne von 1522879200000 Millisekunden seit 01.01.1970 folgendes in Oracle tue:
dann bekomme ich den 04.04.2018.
Wenn ich in Java aber folgendes tue:
dann kriege ich den 05.04.2018. Ich habe jetzt die Vermutung (und darauf deutet auch meine Google-Recherche hin), dass es irgendwie damit zusammenhängt, dass DATE keine Millisekunden unterstützt.
Deswegen hätte ich eigentlich gedacht, dass ich mit Timestamp ein richtiges Ergebnis bekomme:
Tatsächlich bekomme ich aber nachwievor den 04.04.2018. Kann mir jemand zeigen, was ich hier übersehe? Es wäre übrigens auch kein Problem, die Millisekunden als Long rauszuziehen und das Mapping dann außerhalb der Datenbank vorzunehmen, aber ich will gerne meinen Denkfehler verstehen.
ich wundere mich gerade über den folgenden Unterschied bei der Datumsarithmetik in Oracle:
Wenn ich mit einer Zeitspanne von 1522879200000 Millisekunden seit 01.01.1970 folgendes in Oracle tue:
Code:
SELECT TO_DATE('19700101', 'YYYYMMDD') + (1/24/60/60/1000) * 1522879200000 FROM DUAL
dann bekomme ich den 04.04.2018.
Wenn ich in Java aber folgendes tue:
Code:
new Date(1522879200000l)
dann kriege ich den 05.04.2018. Ich habe jetzt die Vermutung (und darauf deutet auch meine Google-Recherche hin), dass es irgendwie damit zusammenhängt, dass DATE keine Millisekunden unterstützt.
Deswegen hätte ich eigentlich gedacht, dass ich mit Timestamp ein richtiges Ergebnis bekomme:
Code:
SELECT TO_TIMESTAMP('19700101', 'YYYYMMDD') + (1/24/60/60/1000) * 1522879200000 FROM DUAL
Tatsächlich bekomme ich aber nachwievor den 04.04.2018. Kann mir jemand zeigen, was ich hier übersehe? Es wäre übrigens auch kein Problem, die Millisekunden als Long rauszuziehen und das Mapping dann außerhalb der Datenbank vorzunehmen, aber ich will gerne meinen Denkfehler verstehen.