Oracle 9.2i unix timestamp sekunden in datum umrechnen

tplanitz

Erfahrenes Mitglied
Hallo,

habe in einer tabelle sekunden werte stehen seit dem 01.01.1970 (unix timestamp). Gibt es eine oracle funktion die mir das datum dazu ausgibt
Vielen dank für Hilfe
Beste Grüße

Thorsten
 
Von Oracle gibt es keine fertige Funktion. Aber ich hab das auch schonmal gebraucht:

SQL:
CREATE OR REPLACE FUNCTION unixts2date( n_seconds 	IN 	PLS_INTEGER) 
										RETURN 			DATE 
IS
	unix_start	DATE 			:= TO_DATE('01.01.1970','DD.MM.YYYY');
	unix_max   	PLS_INTEGER 	:= 2145916799;
	unix_min	PLS_INTEGER 	:= -2114380800;
	
BEGIN

	IF n_seconds > unix_max THEN
	   RAISE_APPLICATION_ERROR( -20901, 'UNIX timestamp too large for 32 bit limit' );
	ELSIF n_seconds < unix_min THEN
	    RAISE_APPLICATION_ERROR( -20901, 'UNIX timestamp too small for 32 bit limit' );
	ELSE
		RETURN unix_start + NUMTODSINTERVAL( n_seconds, 'SECOND' );
	END IF;

EXCEPTION
	WHEN OTHERS THEN
		RAISE;
END;
/

SQL:
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session wurde geandert.

SQL> select unixts2date( 1157486783 ) from dual;

UNIXTS2DATE(1157486
-------------------
05.09.2006 20:06:23
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
erst mal danke für die klasse funktion, das klappt sehr gut. Es gibt nur ein kleines thema. Zum gegenrechnen habe ich mir mal ein paar rechner im web angesehen z.B.:
"http://www.redio.de/bibliothek/27/unix_timestamp_generieren.html" da wird immer GMT +2ausgegeben, also die sekunden (1157486783) +2 stunden. Das hätte ich auch gerne in meinen Abfragen so, wie kriege ich den offset von Sommer/Winterzeit automatisch in meine Abfragen rein?

Herzlichen Dank für Ideen

Gruß Thorsten
 
Zurück