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

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

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

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') current_date, (sysdate- to_date('1970-01-01','yyyy-mm-dd')) * 86400 current_milli from dual;
CURRENT_DATE        CURRENT_MILLI
-------------------               -------------
2011-03-28 18:42:11     1301337731
时区导致的问题: 比如我使用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
-------------------               -------------
2011-03-28 18:42:11    1301308931
用简单的Java测试代码测试、结果显示完全匹配;Java代码如下:

Date date = new Date(1301337731L);
System.out.println(date);           //2009-08-25 17:33:17  

 

 

 //得到当前日期的秒数
      Date d=new Date();
      System.out.println(d.getTime()/1000);   //d.getTime()得到的是毫秒数  1301309324
     
    //知道毫秒数得到当前日期
      Date d1=new Date(1301308931*1000l);  //此值为毫秒数
      System.out.println(sdf.format(d1));            //2011-03-28 18:42:11

你可能感兴趣的:(java,oracle,sql)