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) 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的更多相关文章
- JAVA中获取当前运行的类名,方法名,行数
JAVA中获取当前运行的类名,方法名,行数 public static String getTraceInfo(){ StringBuffer sb = new StringBuffer(); Sta ...
- JAVA中实现让程序等待一段时间的方法
JAVA中想让代码等待一段时间再继续执行,可以通过让当前线程睡眠一段时间的方式. 方法一:通过线程的sleep方法. Thread.currentThread().sleep(1000); 在需要程序 ...
- Oracle中,将毫秒数转换为timestamp类型的两种方法
在许多场景中,开发人员习惯用1970-01-01 00:00:00.000以来的毫秒数来表示具体的时间,这样可以将数据以NUMBER类型存储到数据库中,在某些时候方便比较,同样,有些时候我们需要 把这 ...
- java中的、标识符、运算符以及数据类型之间的转换。
---恢复内容开始--- 数据类型之间的转换: 1:自动转换:就是不用说出要转换成什么类型,由java中的虚拟机自动将小数据类型转换成大数据类型,但大数据中的数据精度有可能被破坏. 2:强制转换:强制 ...
- [java,2017-05-16] java中清空StringBuffer的方法以及耗费时间比较
java中清空StringBuffer的方法,我能想到的有4种: 1. buffer.setLength(0); 设置长度为0 2. buffer.delete(0, buffer.length() ...
- Java中获取前一天和后一天时间
今天在开发项目的时候遇到一个问题就是怎么获取当前时间的前一天和后一天,这个实现的逻辑并不复杂,自己要写的话的也不是难事,但是貌似感觉没必要自己写这样的方法,想想Java中的Calendar类应该有这样 ...
- 在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?
int number = 0xFF: 字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值. 0xFF是一个整数字面值,整数字面值的缺省类型是 int. 我们知道在Java中, in ...
- java中计算一段时间内白天的时间和夜晚的时间
之前,采用拼接字符串的形式,不断地在Date类型和Long类型之间转换,实在是太过于麻烦,后来采取了这种思路:假设我们将22:00 ~ 10:00 视为夜间时间,则我们先计算出10:00 相对于当天的 ...
- 谈谈Java中的集合list、set、map之间的区别
参考文献:https://www.cnblogs.com/IvesHe/p/6108933.html 我这里只总结其区别,具体的说明,请查看参考文献,讲的很详细. A.list接口,实现子类有:arr ...
随机推荐
- 使用CocoaPods管理第三方开源类库
iOS开发中经常会用到许多第三方开源类库,比如AFNetworking.FMDB.JSONKit等等,使用CocoaPods这个工具就能很方便得对工程中用到的类库进行管理,包括自动下载配置以及更新. ...
- 基于AFNetWorking 3.0封装网络请求数据的类
对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用 ...
- myeclipse10安装findbugs
尝试过myeclipse10环境下,在线安装findbugs,插件包是能下载到指定目录下,可是由于版本问题,findbugs插件是不能使用的.所以才有了下面的离线安装 离线安装findbugs 操作系 ...
- 记录Java的垃圾回收机制和几种引用
一.Java的垃圾回收机制 Java的垃圾回收机制(java garbage collection)是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的堆内存空间. ...
- linux crontab & 每隔10秒执行一次
linux下定时执行任务的方法 在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINU ...
- Entity Framework做IN查询
开发中遇到的Too high level of nesting for select错误 项目使用了Entity Framework结合Mysql, 遇到了一个非常奇怪的性能问题,一个看起来非常简单的 ...
- Node.js(1)-helloworld
1.Node.Js 环境准备 下载地址: node.js http://nodejs.org/download/ vs.net集成开发环境: Node.js Tools for Visual St ...
- 第二章 Mysql 数据类型简介--(整数类型、浮点数类型和定点数类型,日期与时间类型,字符串类型,二进制类型)
第一节:整数类型.浮点数类型和定点数类型 1,整数类型 2,浮点数类型和定点数类型 M 表示:数据的总长度(不包括小数点):D 表示:小数位:例如 decimal(5,2) 123.45存入数据的时候 ...
- Redhat6.5 安装64位oracle11.2.0.1
系统架构 [root@localhost ~]# uname -a Linux db 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 ...
- sqlserver 2005 分布式架构 对等事务复制 .
http://www.cnblogs.com/qanholas/archive/2012/03/22/2412444.html 一.为什么要使用对等事务复制 首先要说明的是使用sqlserve ...