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;

    --时间格式转格林威治时间
      FUNCTION date_to_gmt_time(p_date IN DATE) RETURN VARCHAR2;

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;

  

    --时间格式转格林威治时间
    FUNCTION date_to_gmt_time(p_date IN DATE) RETURN VARCHAR2 IS
      l_return_str VARCHAR2(50);
    BEGIN
      IF p_date IS NOT NULL THEN
        SELECT to_char(p_date, 'YYYY-MM-DD') || 'T' ||
             to_char(p_date, 'HH24:MI:SS') || '.000+08:00'
        INTO l_return_str
        FROM dual;
      ELSE
      l_return_str := NULL;
      END IF;

      RETURN l_return_str;

    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的更多相关文章

  1. JAVA中获取当前运行的类名,方法名,行数

    JAVA中获取当前运行的类名,方法名,行数 public static String getTraceInfo(){ StringBuffer sb = new StringBuffer(); Sta ...

  2. JAVA中实现让程序等待一段时间的方法

    JAVA中想让代码等待一段时间再继续执行,可以通过让当前线程睡眠一段时间的方式. 方法一:通过线程的sleep方法. Thread.currentThread().sleep(1000); 在需要程序 ...

  3. Oracle中,将毫秒数转换为timestamp类型的两种方法

    在许多场景中,开发人员习惯用1970-01-01 00:00:00.000以来的毫秒数来表示具体的时间,这样可以将数据以NUMBER类型存储到数据库中,在某些时候方便比较,同样,有些时候我们需要 把这 ...

  4. java中的、标识符、运算符以及数据类型之间的转换。

    ---恢复内容开始--- 数据类型之间的转换: 1:自动转换:就是不用说出要转换成什么类型,由java中的虚拟机自动将小数据类型转换成大数据类型,但大数据中的数据精度有可能被破坏. 2:强制转换:强制 ...

  5. [java,2017-05-16] java中清空StringBuffer的方法以及耗费时间比较

    java中清空StringBuffer的方法,我能想到的有4种: 1. buffer.setLength(0);  设置长度为0 2. buffer.delete(0, buffer.length() ...

  6. Java中获取前一天和后一天时间

    今天在开发项目的时候遇到一个问题就是怎么获取当前时间的前一天和后一天,这个实现的逻辑并不复杂,自己要写的话的也不是难事,但是貌似感觉没必要自己写这样的方法,想想Java中的Calendar类应该有这样 ...

  7. 在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?

    int number = 0xFF: 字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值. 0xFF是一个整数字面值,整数字面值的缺省类型是 int. 我们知道在Java中, in ...

  8. java中计算一段时间内白天的时间和夜晚的时间

    之前,采用拼接字符串的形式,不断地在Date类型和Long类型之间转换,实在是太过于麻烦,后来采取了这种思路:假设我们将22:00 ~ 10:00 视为夜间时间,则我们先计算出10:00 相对于当天的 ...

  9. 谈谈Java中的集合list、set、map之间的区别

    参考文献:https://www.cnblogs.com/IvesHe/p/6108933.html 我这里只总结其区别,具体的说明,请查看参考文献,讲的很详细. A.list接口,实现子类有:arr ...

随机推荐

  1. Android性能优化--Listview优化

    ListView的工作原理 首先来了解一下ListView的工作原理(可参见http://mobile.51cto.com/abased-410889.htm),如图: ListView 针对每个it ...

  2. 怎么向Xcode6 IOS8之后向项目中添加预编译文件

    苹果的XCode在6版本之后新建项目时取消了自动创建预编译头文件pch,该文件里存放的工程中一些不常被修改的代码,比如常用的框架头文件,这样做的目的提高编译器编译速度.我们可以往里面加入一些项目中都要 ...

  3. 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(六)Picker View视图 学习笔记

    想对PickerView进行操作,只能在代码中操作. 下面 ,再添加三个label组件,然后将所有组件配置到代码中(看代码),然后要实现对PickerView的操作,就要实现它的DataSource协 ...

  4. android中实现view可以滑动的六种方法续篇(一)

    承接上一篇,如果你没有读过前四章方法,可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4985053.html 下面开始讲第五中方法. 五.利用Sc ...

  5. 如何成功发布一个MSMQ的Windows服务

    因为MSMQ的使用需要不断的查看队列是否有新消息,所以一般是结合Windows的服务,当然也可以用一个不关闭的Winform程序,不过前者更好一些,不怕被人误关. 完成MSMQ的WindowsServ ...

  6. 集线器hub、交换机switch、路由器router 的区别

    原文链接:http://blog.csdn.net/thq0201/article/details/7782319 首先说HUB,也就是集线器.它的作用可以简单的理解为将一些机器连接起来组成一个局域网 ...

  7. 在VS2010中使用Outlook工具栏

    参考资料:微软MSDN.VS2010示例代码 一开始上段子总是能活跃气氛,等哪天我再打开自己的这篇博客,总是能够让自己傻傻的乐一下. 我一女同学,毕业去一大公司应聘,竞争很激烈,最后剩下她和一位女士. ...

  8. FAQ-Ubuntu12.04 15.04禁止移动介质自动播放

    网上有有很多关于Ubuntu10.04关闭移动介质自动播放的方法,包括在文件管理器里面设置或者使用gconf-editor,但是从12.04开始这两种方法都不再好用了,关于移动介质的处理方法被移到了S ...

  9. FQ 也要使用 Telegram

    不知怎么回事,一款优秀的开源,跨平台,安全的即时通讯工具 Telegram 就被 GG 了. 但是我们还得继续使用--那就 FQ 吧.用 ShadowSocks FQ 还不错. 安装 ShadowSo ...

  10. Android 内存分析

    1.使用adb命令查看app内存使用情况 adb shell dumpsys meminfo <package_name> adb shell top | grep <package ...