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. UITabBarController的创建等基本方法

    #import "AppDelegate.h" @interface AppDelegate () <UITabBarControllerDelegate> @end ...

  2. 斯坦福iOS7公开课4-6笔记及演示Demo

    1.变量类型别滥用id,如果不仔细容易在程序执行时引发错误,因为在编译阶段编译器只是检测变量对象所属类型,尤其是类型为id时代表任何类型都可以通过检查,但不会检测变量对象调用的方法,这样当对象所属类不 ...

  3. iOS网络-04-大文件下载

    大文件下载注意事项 若不对下载的文件进行转存,会造成内存消耗急剧升高,甚至耗尽内存资源,造成程序终止. 在文件下载过程中通常会出现中途停止的状况,若不做处理,就要重新开始下载,浪费流量. 大文件下载的 ...

  4. 浅谈iOS中的单例模式

    iOS中的单例模式     就我本身理解而言,我认为的单例:单例在整个工程中,就相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你 ...

  5. Linux之存储及文件系统管理

    一.存储管理 1.各种存储设备在Linux系统中对应的文件名 2.硬盘结构及分区 1).硬盘结构 2) .为什么要进行硬盘分区: a) 更容易管理和控制系统,因为相关的文件和目录都放在一个分区中. b ...

  6. input输入框focus获得焦点边缘发亮

    从某个插件上摘下来的代码 <html> <head> <title> New Document </title> <style> texta ...

  7. Android ImageButton图像灰色边框

    灰色边框,是imageButton空间自带的. 第一种解决方案: android:scaleType="fitXY"//这个代码是:拉伸图片(不按比例)以填充的长宽.所以图像最后最 ...

  8. 原始的2文件的makefile错误

    从来没系统的看过makefile文档,平时属于复制模板,用完即忘,下午尝试按自己的理解写一个最简单的makefile,含2个.c文件,1个.h文件,费了个把小时,参考别人的文章才弄出来,特记录. ma ...

  9. Java中的流

    一.Java中流的原理 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行.设备可以是文件,网络,内存等. 四种基本流InputStream,Ou ...

  10. 如何判断两个String是否是Anagrams_java实现

    Anagrams:是颠倒字母顺序的字符串 本文提供三个方法,分别分析时间空间复杂度 方法一:暴力遍历 时间复杂度:O(n^2) 方法二:基于排序算法,Sorting的时间复杂度是O(n*log(n)) ...