Der Unix Timestamp (der in vielen Applikationen benutzt wird) und Oracles Datums Format sind leider sehr unterschiedlich. Während Unix die Sekunden ab dem 01.01.1970 zählt, beginnt bei Oracle die Zeitrechnung schon 4000 vor Christi Geburt. Ca. 2 mal im Jahr brauche ich diese Umrechnung und jedes Mal frage ich mich, wie war das noch. Heute ist es mir einen Blogeintrag wert.
Es gibt verschieden Ansätze um vom Unix Timestamp zum Oracle Date Format zu gelangen. Hier sind 2 zur Auswahl:
select to_char(TO_DATE('19700101000000','YYYYMMDDHH24MISS') + NUMTODSINTERVAL(1094165422, 'SECOND'), 'dd.mm.yyyy hh24:mi') datum from dual; 02.09.2004 22:50
Eine fertige Funktion mit Fehlerbehandlung gibt es hier.
Fragt man Tom auf asktom.oracle.com, so findet man dort auch für verschiedene Zeitzonen eine Lösung:
-- normal SELECT to_char(to_date('01011970','ddmmyyyy') + 1/24/60/60 * 1094165422, 'dd.mm.yyyy hh24:mi' ) from dual 02.09.2004 22:50 -- mit abweichender Zeitzone SELECT to_char(new_time( to_date('01011970','ddmmyyyy') + 1/24/60/60 * 1094165422,'GMT', 'EDT' ), 'dd.mm.yyyy hh24:mi' ) from dual 02.09.2004 18:50
Was davon ist jetzt das Feld, welches du umwandelst?
1094165422 ist in diesem Beispiel der Unix Timestamp um den es geht und dual ist die Hilfstabelle in Oracle, die man für Berechnungen nutzen kann. Die Berechnung selbst kann man davon unabhängig aber auch in PL/SQL benutzen.
[…] schau mal dort. Konvertierung Unix Timestamp zu Oracle Date all-IT […]