CREATE OR REPLACE FUNCTION Unix_To_Oracle_Date
(
p_unix_date IN NUMBER, -- Range of >= 0
p_num_hr_gmt_diff IN PLS_INTEGER -- Range of -24 to +24
) RETURN DATE AS
/*
Function Name: Unix_To_Oracle_Date
Purpose: To calculate an Oracle date based on a Unix GMT date
in seconds, since the epoch of Unix (January 1st, 1970).
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: Giovanni@CheckOut.com
Creation Date: Copyright ? CheckOut.com December 2, 1999
Parameters: p_unix_date of NUMBER type (Range is > 0 only)
p_num_hr_gmt_diff of PLS_INTEGER type (Range -24 to +24)
Input: NONE
Output: NONE
Returned value: DATE := Unix_To_Oracle_Date(p_Unix_Date);
*/
-- CONSTANTS
-- These 2 CONSTANTS below are of POSITIVE type to indicate that they
-- CANNOT be less than 1
c_SECONDS_IN_DAY CONSTANT POSITIVE := 86400;
c_HOURS_IN_DAY CONSTANT POSITIVE := 24;
c_UNIX_EPOCH_DATE_TIME_STRING CONSTANT VARCHAR2(50) := '01/01/1970 00:00:00';
c_DATE_FORMAT CONSTANT VARCHAR2(50) := 'MM/DD/YYYY HH24:MI:SS';
-- VARIABLES
v_sql_code PLS_INTEGER;
v_sql_error_message VARCHAR2(512);
-- The 2 variables have to be of NUMBER type because a PLS_INTEGER divided by
-- another PLS_INTEGER can result in a fraction, thus the result must be of
-- NUMBER type only
v_unix_seconds NUMBER;
v_gmt_time_gap NUMBER;
v_return_value DATE;
BEGIN
IF(NOT (p_num_hr_gmt_diff < (-c_HOURS_IN_DAY)) AND
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, c_DATE_FORMAT) +
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.PUT_LINE('OTHER ERROR');
DBMS_OUTPUT.PUT_LINE(v_sql_error_message);
END Unix_To_Oracle_Date;
- 2006-12-05把XML的数据转换成多列表格形式
- 2006-05-18将Word形式的选择题转换为Excel或DBF格式
- 2002-09-15C#中的类型转换
- 2004-03-04一个将阿拉伯数字转换成中文大写的好算法【
- 2002-10-24各种数字类型转换成字符串型--JAVA
- 2001-11-04数字向中文转换
- 2001-11-30阳历到阴历的转换
- 2002-08-30新手写的进制转换器(写的很笨)
- 2006-05-18轻松搞定Excel表格与图片的转换
- 2004-03-01熟能生巧:PowerPoint文件转换也精彩
热点搜索
热点文章






