【问题标题】:Converting NUMBER variable to Datetime stamp将 NUMBER 变量转换为日期时间戳
【发布时间】:2015-05-04 15:30:33
【问题描述】:

我正在使用以下内容,将 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 毫秒四舍五入到最接近的秒数。 请帮忙!

【问题讨论】:

    标签: oracle to-timestamp


    【解决方案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
    

    希望有帮助

    【讨论】:

      【解决方案2】:

      如果您对利用毫秒数进行四舍五入不感兴趣,您可以使用子字符串有效地获取您的时代的“地板”:

      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 时间戳格式中的毫秒数),然后将其添加到 epoch 以获取您的时间。

      【讨论】:

        猜你喜欢
        • 2016-11-26
        • 1970-01-01
        • 2020-10-19
        • 1970-01-01
        • 2017-04-25
        • 2022-01-08
        相关资源
        最近更新 更多