Apache嵌入式德比TIMESTAMPDIFF功能在白天节省后再返回1小时

时间:2017-01-09 09:03:38

标签: java apache embedded-database

我的应用程序正在使用apache嵌入式德比。它正在读取其中一个时间戳列,例如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 // interval

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

  

格林尼治标准时间:周一,2017年1月9日08:45:54 GMT

使用的时区仅限GMT。请让我知道我哪里出错了。

先谢谢。

1 个答案:

答案 0 :(得分:0)

由于我无法弄清楚上述问题的根本原因,我改变了我的逻辑。在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中创建用户定义的函数,请参阅以下位置 - Creating Apache Derby User defined Functions