В своем Java-коде я выполняю простой запрос:
Код: Выделить всё
String query = "SELECT now();";
try {
conn2 = driver2.connect(url2, info2);
stmt2 = conn2.prepareStatement(query);
rs2 = stmt2.executeQuery();
while (rs2.next()) {
String result = rs2.getString(1);
System.out.println("Query Result: " + result);
}
} catch (SQLException e) {
System.out.println("Connection failed!");
e.printStackTrace();
} finally {
try {
if (rs1 != null) rs1.close();
if (rs2 != null) rs2.close();
if (stmt1 != null) stmt1.close();
if (stmt2 != null) stmt2.close();
if (conn1 != null) conn1.close();
if (conn2 != null) conn2.close();
System.out.println("Resources closed!");
} catch (SQLException e) {
e.printStackTrace();
}
}
Что я вижу в psql
Если я подключаюсь к psql:
Код: Выделить всё
youyou=> show timezone;
TimeZone
----------
UTC
(1 row)
youyou=> select now();
now
-------------------------------
2026-02-25 02:17:23.056023+00
(1 row)
Код: Выделить всё
youyou=> show timezone;
TimeZone
---------------
Asia/Shanghai
(1 row)
youyou=> select now();
now
-------------------------------
2026-02-25 10:18:05.671536+08
(1 row)
Что я вижу в Java
При использовании одной и той же базы данных, когда я запускаю свой Java-код в обеих конфигурациях (часовой пояс БД = UTC и часовой пояс БД = Азия/Шанхай), я всегда получаю:
Код: Выделить всё
Connected!
Query Result: 2026-02-25 10:19:03.137973+08
Resources closed!
Connected!
Query Result: 2026-02-25 10:19:51.019322+08
Resources closed!
Мои вопросы
- Почему JDBC всегда показывает мне время Азии/Шанхая, даже если часовой пояс базы данных установлен в UTC, а psql показывает UTC?
- Каков рекомендуемый/элегантный способ контролировать это в коде приложения? Например:
- Должен ли я явно установить часовой пояс сеанса после установления соединения?
- Или мне следует передать параметр часового пояса в URL-адресе JDBC?
Подробнее здесь: https://stackoverflow.com/questions/798 ... imezone-vi
Мобильная версия