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

Posted

技术标签:

【中文标题】Apache 嵌入式 derby TIMESTAMPDIFF 函数在夏令时后额外返回 1 小时【英文标题】:Apache embedded derby TIMESTAMPDIFF function returning 1 hour additional after day light saving 【发布时间】:2017-01-09 09:03:37 【问题描述】:

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

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。请让我知道我哪里出错了。

提前致谢。

【问题讨论】:

【参考方案1】:

由于我无法找出上述问题的根本原因,我改变了我的逻辑。在 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

【讨论】:

以上是关于Apache 嵌入式 derby TIMESTAMPDIFF 函数在夏令时后额外返回 1 小时的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Derby 作为嵌入式数据库的 Spring-boot 错误

Derby

有关与Apache Derby和Java连接的协议

Apache Derby - java.sql.SQLException:无法启动数据库

基于 Eclipse 的 Apache Derby 工具

Derby 嵌入式驱动程序 - 将应用程序导出到 JAR 后“找不到类”