Как прочитать значение столбца TIMESTAMPTZ в часовом поясе sesson, которое задается запросом SET TIMEZONE - PullRequest
3 голосов
/ 03 февраля 2020

Я пытаюсь прочитать данные timestamptz с помощью java jdb c.

Когда я устанавливаю часовой пояс сеанса (часовой пояс соединения) на postgresql, я ожидаю прочитать все столбцы timestamptz в данном часовом поясе сессии. Когда я читаю набор результатов методом getString (), он возвращает ожидаемое значение timestamptz, но метод getTimestamp () возвращает дату в часовом поясе по умолчанию для jvm.

Вот пример кода:

    try {
        Class.forName("org.postgresql.Driver");
        Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/tztestdb", "postgres", "123456");

        Statement setTZ = connection.createStatement();
        setTZ.execute("SET timezone='UTC'");
        //setTZ.execute("SET timezone='Europe/Istanbul'");

        Statement stmt = connection.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT datetimetzcol,datetimecol FROM TZTEST");

        ResultSetMetaData jMetadata = rs.getMetaData();
        int ColumnType = jMetadata.getColumnType(1);

        while (rs.next()) {
            System.out.println("STRING: " + rs.getString(1) + " TYPE ->" + ColumnType);
            System.out.println("TIME S: " + rs.getTimestamp(1) + " TYPE ->" + ColumnType);
        }
        connection.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

А вот вывод:

STRING: 2020-01-01 07: 00: 00 + 00 TYPE -> 93

ВРЕМЯ S: 2020-01-01 10: 00: 00.0 ТИП -> 93

Моя таблица базы данных содержит два столбца: первый - метка времени, второй - метка времени , Когда я тестирую аналогичный код в mysql, идентифицирует идентичные даты в отличие от postgresql.

Кроме того, когда я читаю столбец timestamptz с информацией о часовом поясе, ничего не меняется. Вот мой дополнительный ряд:

System.out.println(rs.getTimestamp(1, Calendar.getInstance(TimeZone.getTimeZone("UTC"))));

и вывод такой же:

2020-01-01 10: 00: 00.0

Мой ожидаемый значение:

2020-01-01 07: 00: 00.0

Существует ли решение, позволяющее избежать чтения столбца timestamptz в часовом поясе jvm по умолчанию. Я просто хочу прочитать данные в часовом поясе сессии, который я установил с помощью запроса SET TIMEZONE.

...