提问人:Mira 提问时间:10/12/2023 更新时间:10/12/2023 访问量:49
有没有办法从 Java 代码中获取 postgreSQL 数据库时区?[复制]
Is there any way to obtain postgreSQL database timezone from Java code? [duplicate]
问:
我有Java Spring Boot应用程序。我使用HikariDataSource连接到postgreSQL数据库。我使用 jdbcTemplate 将 sql 查询发送到数据库。 我想从其设置中获取 postreSQL 数据库时区,但我只获取本地 JVM 时区。
我已经尝试过这样的SQL查询:
show timezone
SELECT * FROM pg_timezone_names WHERE abbrev = current_setting('TIMEZONE')
SELECT current_setting('TIMEZONE')
但所有这些查询都向我返回了我的本地时区,而不是数据库时区。 如何在 Java 代码中获取 postgreSQL 数据库时区设置?请帮忙
答:
要从 Java 代码中获取 PostgreSQL 数据库时区设置,可以使用 直接在数据库上执行 SQL 查询。但是,请记住,PostgreSQL 没有直接的 SQL 命令来检索时区设置。默认情况下,PostgreSQL 使用操作系统的时区,如果 PostgreSQL 配置中未设置显式时区,则可能需要检查系统时区。JdbcTemplate
假设您有一个实例,您可以执行以下查询来获取 PostgreSQL 数据库的时区设置:JdbcTemplate
```
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class DatabaseTimeZoneResolver {
private final JdbcTemplate jdbcTemplate;
@Autowired
public DatabaseTimeZoneResolver(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public String getDatabaseTimeZone() {
// Query to retrieve PostgreSQL timezone setting
String sql = "SELECT current_setting('TIMEZONE')";
// Execute the query and get the timezone setting
String timezone = jdbcTemplate.queryForObject(sql, String.class);
return timezone;
}
}
```
在此代码中,是用于执行 SQL 查询的 Spring 组件。该方法执行查询以检索数据库时区设置,并将其作为 .DatabaseTimeZoneResolver
JdbcTemplate
getDatabaseTimeZone()
SELECT current_setting('TIMEZONE')
String
确保您的 Bean 在 Spring 应用程序上下文中配置正确。如果您的应用程序仍在返回 JVM 时区,则 PostgreSQL 数据库可能确实使用了系统时区,您可能需要检查安装 PostgreSQL 的操作系统的时区设置。JdbcTemplate
此外,如果要为 PostgreSQL 数据库设置特定时区,可以修改 PostgreSQL 配置文件(通常为 )并设置参数。修改配置后,需要重启PostgreSQL服务器才能使更改生效。postgresql.conf
timezone
评论