java中從1970-1-1到目前時間之間的毫秒數轉換為oracle date

來源:互聯網
上載者:User

標籤:方法   util   oracle   tin   between   char   session   最佳化   tor   

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) RETURN DATE DETERMINISTIC;    FUNCTION unix_timestamp_to_session_date(in_unix_timestamp IN NUMBER) RETURN DATE DETERMINISTIC;    FUNCTION date_to_unix_timesecond(in_date IN DATE) RETURN NUMBER DETERMINISTIC;    FUNCTION date_to_unix_times_millis(in_date IN DATE) RETURN NUMBER DETERMINISTIC;    FUNCTION java_currenttimemillis RETURN NUMBER;    FUNCTION current_unix_times_millis RETURN NUMBER DETERMINISTIC;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 IS        v_date DATE;    BEGIN        v_date := to_date(‘1970-01-01‘,                          ‘yyyy-mm-dd‘) + in_unix_timestamp / 1000 / 60 / 60 / 24;        RETURN v_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 IS        v_date DATE;    BEGIN        v_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;        RETURN v_date;    END;    --返回1970-01-01 00:00:00到in_date之間的秒數    FUNCTION date_to_unix_timesecond(in_date IN DATE) RETURN NUMBER DETERMINISTIC IS        v_unix_timestamp NUMBER;    BEGIN        v_unix_timestamp := (in_date - to_date(‘1970-01-01‘,                                               ‘yyyy-mm-dd‘)) * 60 * 60 * 24;        RETURN v_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 IS        v_unix_timestamp NUMBER;    BEGIN        v_unix_timestamp := (in_date - to_date(‘1970-01-01‘,                                               ‘yyyy-mm-dd‘)) * 1000 * 60 * 60 * 24;        RETURN v_unix_timestamp;    END;    --返回java的當前毫秒數    FUNCTION java_currenttimemillis RETURN NUMBER AS        LANGUAGE JAVA NAME ‘java.lang.System.currentTimeMillis() return java.lang.Integer‘;    --返回目前時間的毫秒數    FUNCTION current_unix_times_millis RETURN NUMBER DETERMINISTIC IS        v_unix_timestamp NUMBER;    BEGIN        v_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‘));        RETURN v_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

 

java中從1970-1-1到目前時間之間的毫秒數轉換為oracle date

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.