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 ...
随机推荐
- Swift学习--闭包的简单使用(三)
一.Swift中闭包的简单使用 override func viewDidLoad() { super.viewDidLoad() /** 闭包和OC中的Block非常相似 OC中的block类似于匿 ...
- ios 删除系统从相册压缩的视频
iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认 ...
- iOS之 kamailio-4.3.4sip服务器搭建-mac
如要转载请注明出处http://www.cnblogs.com/chengxiaoyu/p/5006352.html 1.安装MySQL 去http://www.mysql.com/下载最新版本的My ...
- android 使用HttpURLConnection方式提交get/post请求
源码链接 package com.zhangbz.submitdata.Utils; import java.io.ByteArrayOutputStream; import java.io.IOEx ...
- Android地图开发之地图的选择
做lbs开发差不多快2年了,地图相关的产品也差不多做了3个了,用到过的地图包括google地图.高德地图.百度地图.图吧.Osmdroid,今天总结下,方便大家开发时选择合适的地图. 首先说定位模块选 ...
- Git哲学与使用
-- 故国神游,多情应笑我,早生华发. Git是什么? Git是一个版本控制工具,代码管理工具,团队协作工具.它跟SVN等传统工具实现同样的目的:但从某种程度来说,它更快,更灵活.我想绝大多数读者都已 ...
- C++基础——子类转父类转子类 (派生类转基类转派生类)
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- Nginx安装学习使用详细记录
选择Nginx的优点:Nginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版. Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建 ...
- PHP验证码
设计一个验证码类,在需要的时候可以随时调用 验证码类,保存为ValidateCode.class.php <?php //验证码类 session_start(); class Validate ...
- jQuery Validate 表单验证插件----Validate简介,官方文档,官方下载地址
一. jQuery Validate 插件的介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆 ...