Postgresql JDBC 使用时区读取数据
Posted
技术标签:
【中文标题】Postgresql JDBC 使用时区读取数据【英文标题】:Postgresql JDBC read data with timezone 【发布时间】:2017-02-27 13:22:01 【问题描述】:我正在使用 Postgresql JDBC 来从与我的客户端系统具有不同时区的另一台服务器读取数据。
读取数据有一些日期类型的列。我希望这些列成为客户端系统时区,为了做到这一点,我认为应该有一种方法告诉 JDBC 服务器的时区是什么。
我正在使用带有 pypsark 的 JDBC。
有什么帮助吗?谢谢。
【问题讨论】:
【参考方案1】:timestamptz
数据在您检索时会自动转换为 Java 默认时区。
您可以使用 java.util.TimeZone.setDefault(java.util.TimeZone)
更改此默认设置。
由于它为整个 JVM 设置了时区,这非常具有侵入性,我将向您展示如何将时间戳格式化为某个时区:
java.sql.ResultSet rs = stmt.executeQuery();
rs.next();
// fetch the first result column as java.sql.Timestamp object
java.sql.Timestamp d = rs.getObject(1, java.sql.Timestamp.class);
// create a calendar with the appropriate time zone
java.util.Calendar cal = java.util.Calendar.getInstance(
java.util.TimeZone.getTimeZone("Asia/Kolkata"));
// create a DateFormat with the appropriate format and locale
java.text.DateFormat df = java.text.DateFormat.getDateTimeInstance(
java.text.DateFormat.MEDIUM,
java.text.DateFormat.MEDIUM,
java.util.Locale.ENGLISH);
// tell the DateFormat to use the calendar with the right time zone
df.setCalendar(cal);
// output will be in the chosen time zone
System.out.println("timestamp = " + df.format(d));
【讨论】:
使用TimeZone.setDefault
可能不是一个好主意,它可能会搞砸应用程序的其他部分。
该问题要求这些列成为客户端系统时区,并想知道如何设置它。但我可以添加信息如何将数据转换到某个时区。以上是关于Postgresql JDBC 使用时区读取数据的主要内容,如果未能解决你的问题,请参考以下文章
jdbc PostgreSQL 中的偏移时间(带时区的时间)
如何在 Azure Databricks 中使用 JDBC 从 PostgreSQL 读取表数据?
如何在 JPA 2 实体中映射 postgresql“带有时区的时间戳”