gpt4 book ai didi

java - postgresql JDBC 驱动程序使用客户端时区

转载 作者:行者123 更新时间:2023-11-29 13:44:13 25 4
gpt4 key购买 nike

我正在使用 postgresql-42.2.2.jar jdbc 驱动程序和 postgresql 9.6 服务器。

如何配置连接以使用服务器时区而不是客户端时区?

查询:

select id, TO_TIMESTAMP(tbl.ended_time / 1000)
FROM tbl
where TO_TIMESTAMP(tbl.ended_time / 1000) >= now()::date + interval '1m'

使用 pgadmin 运行查询我得到以下结果(这是正确的)

"2185"  "2018-06-22 00:02:02-05"
"2186" "2018-06-22 00:03:01-05"
"2187" "2018-06-22 00:13:02-05"

但是使用 JDBC 驱动程序运行相同的查询结果是:

2169 2018-06-22 07:13:01.0
2181 2018-06-22 08:33:02.0
2180 2018-06-22 08:23:01.0
2185 2018-06-22 09:02:02.0
2186 2018-06-22 09:03:01.0
2187 2018-06-22 09:13:02.0

没有使用 pgadmin 运行查询的结果是:

"2169"  "2018-06-21 22:13:01-05"
"2181" "2018-06-21 23:33:02-05"
"2180" "2018-06-21 23:23:01-05"
"2185" "2018-06-22 00:02:02-05"
"2186" "2018-06-22 00:03:01-05"
"2187" "2018-06-22 00:13:02-05"

代码如下:

static String URL = "jdbc:postgresql://some_ip:7000/db";
static String USERNAME = "test";
static String PASSWORD = "test";
static String JDBC_DRIVER = "org.postgresql.Driver";

public static void main(String[] args) {
String query = "select id, TO_TIMESTAMP(tbl.ended_time / 1000) FROM tbl where TO_TIMESTAMP(tbl.ended_time / 1000) >= now()::date + interval '1m'";
Connection conn = null;

try {
Class.forName(JDBC_DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
System.out.println(rs.getObject(1) + "--" + rs.getObject(2));
}
rs.close();
st.close();
conn.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

最佳答案

如解释here ,JDBC 驱动程序使用您的本地时区而不是服务器时区。

不幸的是,没有简单的方法来更改该行为或查询服务器的时区。

另请注意,使用 OffsetDateTime 检索数据没有多大帮助:

rs.getObject(2, OffsetDateTime.class)

因为不幸的是,驱动程序返回所有 OffsetDateTime with an offset of 0 , 所以时区信息丢失了。

因此,您最好的选择可能是硬编码数据库的时区并用 Java 计算时间限制,或者将时区单独存储在数据库中并进行查询。

关于java - postgresql JDBC 驱动程序使用客户端时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50985380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com