【问题标题】:Postgresql JDBC read data with timezonePostgresql JDBC 使用时区读取数据
【发布时间】:2017-02-27 13:22:01
【问题描述】:

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

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

我正在使用带有 pypsark 的 JDBC。

有什么帮助吗?谢谢。

【问题讨论】:

    标签: postgresql jdbc pyspark


    【解决方案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 可能不是一个好主意,它可能会搞砸应用程序的其他部分。
    • 该问题要求这些列成为客户端系统时区,并想知道如何设置它。但我可以添加信息如何将数据转换到某个时区。
    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2010-11-30
    相关资源
    最近更新 更多