Apache 嵌入式 derby TIMESTAMPDIFF 函数在白天夏令时后额外返回 1 小时



我的应用程序正在使用apache嵌入式derby。它正在读取时间戳列之一,例如arrival_time并从数据库当前时间计算间隔。

select {fn TIMESTAMPDIFF(SQL_TSI_MINUTE,timestamp('1970-01-01 00:00:00'),CURRENT_TIMESTAMP)} - min(arrival_time) / 1000 as "TIME" from APP.myTable

此查询工作正常,但在夏令时后,它没有返回正确的间隔。时差始终额外 1 小时。

为了进一步调试,我执行了以下查询 -

select CURRENT_TIMESTAMP from APP.myTable;
select {fn TIMESTAMPDIFF(SQL_TSI_SECOND,timestamp('1970-01-01 00:00:00'),CURRENT_TIMESTAMP)} from APP.myTable;

上述查询的输出如下 -

2017-01-09 07:45:55//当前时间戳

1483951554//间隔

根据我的理解,间隔应该等同于当前时间戳,但是当我尝试将间隔转换为纪元时间戳时,结果如下-

格林威治标准时间:2017年1月9日星期一 08:45:54 GMT

使用的时区仅为格林威治标准时间。请让我知道我哪里出错了。

提前谢谢。

由于我无法找出上述问题的根本原因,因此我更改了逻辑。在 derby 中创建用户定义的函数来计算间隔。用java语言编写了我的函数来计算差异,它起作用了。

class DerbyFunction{ public static long getInterval(long timestamp){ return System.currentTimeMillis() - timestamp; } }

select APP.getInterval(arrival_time) as "TIME" from APP.myTable

要在 apache derby 中创建用户定义的函数,请参阅以下位置 -创建 Apache Derby 用户定义函数

最新更新