将 Unix 纪元时间转换为 Apache Derby 中的日期

Fid*_*del 4 timestamp derby epoch unix-timestamp

Apache Derby 中是否有一个函数可以将 unix 纪元时间值(例如 1453974057 )转换为日期?

Fid*_*del 5

如果您有自 Unix 纪元以来的秒数,请使用:

select
    {fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057, TIMESTAMP('1970-01-01-00.00.00.000000')) } as DT
from sysibm.SYSDUMMY1
Run Code Online (Sandbox Code Playgroud)

只需将“sysibm.SYSDUMMY1”替换为您的原始表,并将 1453974057 替换为您的值。

在处理毫秒时,它会变得有点复杂,因为您不能直接使用 TIMESTAMPADD(您将获得 SQL 状态 22003:结果值超出数据类型 INTEGER 的范围。)

如果您有自 Unix 纪元以来的毫秒数,请使用:

select
    --the following block converts milliseconds since linux epoch to a timestamp
    { fn TIMESTAMPADD(
        SQL_TSI_FRAC_SECOND,
        (
            --add the millisecond component
            1453974057235 - { fn TIMESTAMPDIFF(
                SQL_TSI_SECOND,
                TIMESTAMP('1970-01-01-00.00.00.000000'),
                { fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057235/1000, TIMESTAMP('1970-01-01-00.00.00.000000')) }
            )} * 1000
         ) * 1000000,
         { fn TIMESTAMPADD(SQL_TSI_SECOND, 1453974057235/1000, TIMESTAMP('1970-01-01-00.00.00.000000')) }
    )} as FINAL_DT
from SYSIBM.SYSDUMMY1
Run Code Online (Sandbox Code Playgroud)

只需用您的值替换 1453974057235 的 3 个实例。