我正在使用Postgresql JDBC来从另一台与我的客户端系统有不同时区的服务器读取数据。
读取数据有一些日期类型列。我希望这些列成为客户端系统时区,为了做到这一点,我认为应该有办法向JDBC说服务器的时区是什么。
我正在使用JDBC和pypsark。
有任何帮助吗?感谢。
答案 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));