我正在使用以下内容,我将NUMBER变量转换为日期时间戳。
to_char(
(to_timestamp('01-JAN-1970 00:00:00','DD-MON-YYYY HH24:MI:SS') +
(END_SAMPLE_TS_5MIN_MS/(1000*60*60*24)),'DD-MON-YYYY HH24:MI:SS')
但我注意到上面产生的输出比实际值落后1秒。
比如说END_SAMPLE_TS_5MIN_MS=1388984699999.
而不是显示:06Jan2014 05:04:59
它显示为06Jan2014 05:05:00
毫秒数四舍五入到最接近的秒数。
请帮忙!
答案 0 :(得分:1)
您可以使用numtodsinterval,例如:
select to_timestamp('01-JAN-1970 00:00:00.000','DD-MON-YYYY HH24:MI:SS.FF3') +
numtodsinterval(1388984699.999, 'SECOND')
from dual;
输出:
1/6/2014 5:04:59.999000000 AM
希望有所帮助
答案 1 :(得分:0)
如果您对利用毫秒数进行舍入不感兴趣,可以有效地采用""您的纪元与子字符串:
select to_char((to_timestamp('01-JAN-1970 00:00:00','DD-MON-YYYY HH24:MI:SS')+(substr(1388984699999,1,length(1388984699999)-3)/(60*60*24))),'DD-MON-YYYY HH24:MI:SS')
from dual
我们实际上只是将字符串的子字符串减去最后3位数(此unix时间戳格式的毫秒数),然后将其添加到纪元以获取时间。