JDBC 询问 Sybase 的时间戳偏移一小时?
JDBC asking timestamps from Sybase offset by an hour?
在我查询有关事件信息的 Sybase 数据库中有一个数据库过程(我无权访问它,因此我无法查看其源代码或编辑它),并且这些事件有一个开始和结束日期。
编辑:当我查询新创建的 table 日期时,也会发生这种情况,创建方式如下:
create table jvo_test.test_dates(dt datetime not null primary key)
insert into jvo_test.test_dates(dt) select dateadd(mi, (id-1) *30, '2019-03-06 00:00:00') from rle.row_generator where id between 1 and 48
结束编辑
问题在于,当这些事件发生在午夜后一个小时(因此在 00:00 - 01:00 范围内)时,生成的时间戳会跳回过去一个小时???
示例:现在程序 returns 有两个事件,一个在 23:44 上,另一个在 00:07
上
代码:
Connection c = ds.getConnection();
String sql = "procedure_name 'param1', 'param2', 'param3'";
PreparedStatement ps = c.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
for(int i = 1; i < rsmd.getColumnCount(); i++) {
log.debug("{} is of type: {}", rsmd.getColumnName(i), rsmd.getColumnType(i));
}
log.debug("AS STRING start_time: {}, end_time: {}",
rs.getString("start_time"),rs.getString("end_time"));
log.debug("AS TIMESTAMP start_time: {}, end_time: {}",
rs.getTimestamp("start_time"),rs.getTimestamp("end_time"));
}
这导致以下日志行
start_time is of type: 93
end_time is of type: 93
AS STRING start_time: 2019-02-19 23:44:23.000000, end_time: 2019-02-19 23:44:29.000000
AS TIMESTAMP start_time: 2019-02-19 23:44:23.0, end_time: 2019-02-19 23:44:29.0
start_time is of type: 93
end_time is of type: 93
AS STRING start_time: 2019-02-20 00:0-53:46.000000, end_time: 2019-02-20 00:0-53:53.000000
AS TIMESTAMP start_time: 2019-02-19 23:07:46.0, end_time: 2019-02-19 23:07:53.0
start_time
和 end_time
都是类型 93 或时间戳。
请注意应该在 00:07 开始的第二个事件是如何跳到过去一小时到 23:07
这个一小时的偏移我哪里错了?
问题已通过将 JDBC 数据库驱动程序从内部版本 26502 更新到 27361
得到解决
要找出您的驱动程序的版本,请执行
java -jar jconn4.jar
旧版本将此输出为第一行:
jConnect (TM) for JDBC(TM)/7.00(Build 26502)/P/EBF17993/JDK16/Thu Jun 3 3:09:09 2010
新版本输出:
jConnect (TM) for JDBC(TM)/7.07 SP139 (Build 27361)/P/EBF27161/JDK 1.6.0/jdbcmain/OPT/Thu Jul 27 02:39:00 PDT 2017
在我查询有关事件信息的 Sybase 数据库中有一个数据库过程(我无权访问它,因此我无法查看其源代码或编辑它),并且这些事件有一个开始和结束日期。
编辑:当我查询新创建的 table 日期时,也会发生这种情况,创建方式如下:
create table jvo_test.test_dates(dt datetime not null primary key)
insert into jvo_test.test_dates(dt) select dateadd(mi, (id-1) *30, '2019-03-06 00:00:00') from rle.row_generator where id between 1 and 48
结束编辑
问题在于,当这些事件发生在午夜后一个小时(因此在 00:00 - 01:00 范围内)时,生成的时间戳会跳回过去一个小时???
示例:现在程序 returns 有两个事件,一个在 23:44 上,另一个在 00:07
上代码:
Connection c = ds.getConnection();
String sql = "procedure_name 'param1', 'param2', 'param3'";
PreparedStatement ps = c.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
for(int i = 1; i < rsmd.getColumnCount(); i++) {
log.debug("{} is of type: {}", rsmd.getColumnName(i), rsmd.getColumnType(i));
}
log.debug("AS STRING start_time: {}, end_time: {}",
rs.getString("start_time"),rs.getString("end_time"));
log.debug("AS TIMESTAMP start_time: {}, end_time: {}",
rs.getTimestamp("start_time"),rs.getTimestamp("end_time"));
}
这导致以下日志行
start_time is of type: 93
end_time is of type: 93
AS STRING start_time: 2019-02-19 23:44:23.000000, end_time: 2019-02-19 23:44:29.000000
AS TIMESTAMP start_time: 2019-02-19 23:44:23.0, end_time: 2019-02-19 23:44:29.0
start_time is of type: 93
end_time is of type: 93
AS STRING start_time: 2019-02-20 00:0-53:46.000000, end_time: 2019-02-20 00:0-53:53.000000
AS TIMESTAMP start_time: 2019-02-19 23:07:46.0, end_time: 2019-02-19 23:07:53.0
start_time
和 end_time
都是类型 93 或时间戳。
请注意应该在 00:07 开始的第二个事件是如何跳到过去一小时到 23:07
这个一小时的偏移我哪里错了?
问题已通过将 JDBC 数据库驱动程序从内部版本 26502 更新到 27361
得到解决要找出您的驱动程序的版本,请执行
java -jar jconn4.jar
旧版本将此输出为第一行:
jConnect (TM) for JDBC(TM)/7.00(Build 26502)/P/EBF17993/JDK16/Thu Jun 3 3:09:09 2010
新版本输出:
jConnect (TM) for JDBC(TM)/7.07 SP139 (Build 27361)/P/EBF27161/JDK 1.6.0/jdbcmain/OPT/Thu Jul 27 02:39:00 PDT 2017