CREATE OR REPLACE FUNCTION Unix_To_Oracle_Date
(
p_unix_date IN NUMBER
p_num_hr_gmt_diff IN PLS_INTEGER
) RETURN DATE AS
/*
Function Name: Unix_To_Oracle_Date
Purpose: To calculate an Oracle date based on a Unix GMT date
in seconds
The date returned will be based on the number of hours
the oracle database system clock is either ahead or behind
the Greenwich Mean Time line
If the parameters do not fall within the specified ranges
then the returned date will be NULL
Developer Name: Giovanni Jaramillo
Developer Email: G
Creation Date: Copyright ? December
Parameters: p_unix_date of NUMBER type (Range is >
p_num_hr_gmt_diff of PLS_INTEGER type (Range
Input: NONE
Output: NONE
Returned value: DATE := Unix_To_Oracle_Date(p_Unix_Date);
*/
c_SECONDS_IN_DAY CONSTANT POSITIVE :=
c_HOURS_IN_DAY CONSTANT POSITIVE :=
c_UNIX_EPOCH_DATE_TIME_STRING CONSTANT VARCHAR
c_DATE_FORMAT CONSTANT VARCHAR
v_sql_code PLS_INTEGER;
v_sql_error_message VARCHAR
v_unix_seconds NUMBER;
v_gmt_time_gap NUMBER;
v_return_value DATE;
BEGIN
IF(NOT (p_num_hr_gmt_diff < (
NOT (p_num_hr_gmt_diff > (c_HOURS_IN_DAY))) THEN
v_unix_seconds := (p_unix_date / c_SECONDS_IN_DAY);
v_gmt_time_gap := (p_num_hr_gmt_diff / c_HOURS_IN_DAY);
v_return_value := TO_DATE(c_UNIX_EPOCH_DATE_TIME_STRING
v_unix_seconds + v_gmt_time_gap;
ELSE
v_return_value := NULL;
END IF;
RETURN(v_return_value);
EXCEPTION
WHEN OTHERS THEN
v_sql_code := SQLCODE;
v_sql_error_message := SQLERRM(v_sql_code);
DBMS_OUTPUT
DBMS_OUTPUT
END Unix_To_Oracle_Date;
From:http://tw.wingwit.com/Article/program/Oracle/201311/16933.html