将时区信息完整地提取到Java8 OffsetTime / OffsetDateTime中的时间/日期时间

时间:2017-02-08 16:34:52

标签: java sql-server datetime jdbc java-8

如何将时区信息保持完整,提取到Java8 java.time.OffsetTimejava.time.OffsetDateTime对象,具有SQL类型TIME_WITH_TIME_ZONE / TIMESTAMP_WITH_TIME_ZONE的数据库值? ,如果数据库的时间区域为+03:00-05:00,我希望OffsetTime和{{{{}}}保留时区特异性我从数据库值创建的对象。

在我的特定情况下,时间和时间戳值来自MS SQLServer,但我不认为应该重要... [编辑:看起来MS SQLServer只有{{ 1}}这是时区感知,无需支持OffsetDataTime。]

1 个答案:

答案 0 :(得分:3)

这应该可以使用getObject()的第二个参数,虽然我没有得到MS SQLServer实例来测试它...

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mytable WHERE columnfoo = 500");
while (rs.next()) {
    System.out.print("Column 1 returned ");
    OffsetDateTime localDate = rs.getObject(1, OffsetDateTime.class);
    System.out.println(localDate);
}
rs.close();
st.close();

请注意,这仅适用于数据库的4.2及更高版本的JDBC驱动程序,这些驱动程序支持Java 8 ...请参阅release note for 4.2