Home  >  Article  >  Database  >  Oracle中根据Date型转换成Java对应的long型毫秒数

Oracle中根据Date型转换成Java对应的long型毫秒数

WBOY
WBOYOriginal
2016-06-07 15:07:23872browse

在Java开发中,很多时候我们为了方便会直接使用long型来保存时间,可以通过System.currentTimeMillis()或者是java.util.Date.getTime()来获取;取值为当前日期时间与1970-01-01相差的毫秒数; 但是在Oracle里面,默认没有直接提供获取当前时间的毫秒数的相关

在Java开发中,很多时候我们为了方便会直接使用long型来保存时间,可以通过System.currentTimeMillis()或者是java.util.Date.getTime()来获取;取值为当前日期时间与1970-01-01相差的毫秒数;

但是在Oracle里面,默认没有直接提供获取当前时间的毫秒数的相关function,所以要想在SQL里面获得毫秒数,只能自己手动计算下喽,如下:

  1. SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') current_date, (sysdate- to_date('1970-01-01','yyyy-mm-dd')) * 86400000 current_milli from dual;
  2. CURRENT_DATE        CURRENT_MILLI
  3. -------------------               -------------
  4. 2009-01-06 14:00:09      1231250409000

不好意思,上次我写这篇文章时自己用的时候只是想在Oracle中计算毫秒数并保持在Oracle中,并没有拿到Java中再转换,所以没有详细测试,从而导致某些看我博客的朋友提出不匹配的问题; 现在我测试了一把,应该是时区导致的问题: 比如我使用GMT+08 北京时间,所以按照上面的方式从Oracle中计算出来的毫秒数经Java中转换后的日期会比正常日期大8h;

结合自己系统的时区对SQL语句稍作修改即可:
SQL> select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') current_date,
  2         (sysdate - 8 / 24 - to_date('1970-01-01', 'yyyy-mm-dd')) * 86400000 current_milli
  3    from dual;

CURRENT_DATE        CURRENT_MILLI
-------------------         -------------
2009-08-25 17:33:17 1251192797000

用简单的Java测试代码测试、结果显示完全匹配;Java代码如下:

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn