Postgresql JDBC使用时区读取数据

时间:2017-02-27 13:22:02

标签: postgresql jdbc pyspark

我正在使用Postgresql JDBC来从另一台与我的客户端系统有不同时区的服务器读取数据。

读取数据有一些日期类型列。我希望这些列成为客户端系统时区,为了做到这一点,我认为应该有办法向JDBC说服务器的时区是什么。

我正在使用JDBC和pypsark。

有任何帮助吗?感谢。

1 个答案:

答案 0 :(得分:0)

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));