Я пытаюсь прочитать данные 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.