ORACLE内部是用数字来存储日期, 在编程时也会用到时间到秒值的转换.
正面的转化很简单:
select (sysdate - TO_DATE('01-01-1970','DD-MM-YYYY')) * 86400 from dual

反过来的转换好象就不那么容易了, 比如有一个秒值1019663083要换回时间点. 有个朋友给我个公式如下:
select to_date(trunc(1019663083/86400, 0) + 2440588, 'J') + (mod(1019663083,86400)/86400) from dual

这样算出来是对的, 可不知道那个2440588是怎么得到的.

今天有人问在SYBASE里怎么转换, 看了一下到是不难. 下面这个从1143129599999 (ms)到日期Mar 23 2006 4:00:00:000PM

select dateadd(
ms,
(1143129599999 - ceiling(1143129599999 / 1000 / 3600 / 24 ) * 24 * 3600 * 1000),
(DATEADD(dd, ceiling(1143129599999 / 1000 / 3600 / 24 ), 'Jan 1 1970'))
)



 

1 Comment to “把日期转换到秒值(从1970年1月1日到现在所用的秒)”


  1. sean — March 29, 2006 @ 3:11 am

    Oracle里的第1秒是从Jan 1, 1970开始算起的,而这里的“J”是指Julian日期,那是从Jan 1, 4712 BC开始的,从那天到 Jan 1, 1970正好是 2440588天。

    既然知道了Jan 1, 1970是第1秒计时的话,反过来就不难了吧.



Write a comment

You need tologin.