oracle当前毫秒时间,java中从1970-1-1到当前时间之间的毫秒数转换为oracle date

java中System.currentTimeMillis()取到的是从1970-01-01 00:00:00.000到当前时间的毫秒数,一个long类型的值。

现在oracle数据库中某表中存取的是该值,需要将其转换为可读的date类型。

current millis 中提供了TimeMillis的转换结果以及一些常用的转换方法。

但是其中关于pl/sql取得的数是精确到千毫秒,而不是精确到毫秒。

整理了一个包来进行currentTimeMillis到date的转换。

注意:System.currentTimeMillis()取得的是当前时区的时间,所以在转换的时候需要注意时区的转换。

select sessiontimezone,dbtimezone,sysdate,current_date from dual;

CREATE OR REPLACE PACKAGE cux_time_utils_pkg IS

FUNCTION unix_timestamp_to_utc_date(in_unix_timestamp IN NUMBER) RETURNDATE DETERMINISTIC;FUNCTION unix_timestamp_to_session_date(in_unix_timestamp IN NUMBER) RETURNDATE DETERMINISTIC;FUNCTION date_to_unix_timesecond(in_date IN DATE) RETURN NUMBERDETERMINISTIC;FUNCTION date_to_unix_times_millis(in_date IN DATE) RETURN NUMBERDETERMINISTIC;FUNCTION java_currenttimemillis RETURN NUMBER;FUNCTION current_unix_times_millis RETURN NUMBERDETERMINISTIC;END;

CREATE OR REPLACE PACKAGE BODY cux_time_utils_pkg IS

--return utc0 date

--返回0时区时间

FUNCTION unix_timestamp_to_utc_date(in_unix_timestamp IN NUMBER) RETURN DATE DETERMINISTIC ISv_date DATE;BEGINv_date := to_date(‘1970-01-01‘,‘yyyy-mm-dd‘) + in_unix_timestamp / 1000 / 60 / 60 / 24;RETURNv_date;END;--return sessiontimezone date

--返回当前回话时区时间

--select sessiontimezone,dbtimezone,sysdate,current_date from dual;

FUNCTION unix_timestamp_to_session_date(in_unix_timestamp IN NUMBER) RETURN DATE DETERMINISTIC ISv_date DATE;BEGINv_date := to_date(‘1970-01-01‘,‘yyyy-mm-dd‘) + in_unix_timestamp / 1000 / 60 / 60 / 24 +to_number(substr(tz_offset(sessiontimezone),1,3)) / 24;RETURNv_date;END;--返回1970-01-01 00:00:00到in_date之间的秒数

FUNCTION date_to_unix_timesecond(in_date IN DATE) RETURN NUMBER DETERMINISTIC ISv_unix_timestampNUMBER;BEGINv_unix_timestamp := (in_date - to_date(‘1970-01-01‘,‘yyyy-mm-dd‘)) * 60 * 60 * 24;RETURNv_unix_timestamp;END;--返回1970-01-01 00:00:00到in_date之间的毫秒数

--此方法不够精确,因为in_date精度为秒,所以返回值的精度为千毫秒

--可调整入参结构为timestamp,再进行优化

FUNCTION date_to_unix_times_millis(in_date IN DATE) RETURN NUMBER DETERMINISTIC ISv_unix_timestampNUMBER;BEGINv_unix_timestamp := (in_date - to_date(‘1970-01-01‘,‘yyyy-mm-dd‘)) * 1000 * 60 * 60 * 24;RETURNv_unix_timestamp;END;--返回java的当前毫秒数

FUNCTION java_currenttimemillis RETURN NUMBER ASLANGUAGE JAVA NAME‘java.lang.System.currentTimeMillis() return java.lang.Integer‘;--返回当前时间的毫秒数

FUNCTION current_unix_times_millis RETURN NUMBER DETERMINISTIC ISv_unix_timestampNUMBER;BEGINv_unix_timestamp := extract(DAY FROM(systimestamp - to_timestamp(‘1970-01-01‘,‘YYYY-MM-DD‘))) * 1000 * 60 * 60 * 24 +to_number(to_char(sys_extract_utc(systimestamp),‘SSSSSFF3‘));RETURNv_unix_timestamp;END;END;

参考:

https://currentmillis.com/

http://stackoverflow.com/questions/2824710/oracle-equaivalent-of-java-system-currenttimemillis

http://stackoverflow.com/questions/4312514/get-date-from-a-long-var-char-milliseconds-value-stored-in-oracle-database

http://developer-should-know.com/post/77394226827/converting-between-milliseconds-and-dates-in

原文:http://www.cnblogs.com/huanghongbo/p/6030455.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值