oracle转换unix时间,怎样实现从Unix到Oracle的日期转换?

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 www_bitscn_com

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))) 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;。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值