有没有办法从 Java 代码中获取 postgreSQL 数据库时区?[复制]

Is there any way to obtain postgreSQL database timezone from Java code? [duplicate]

提问人:Mira 提问时间:10/12/2023 更新时间:10/12/2023 访问量:49

问:

我有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 spring-boot 时区 jdbctemplate

评论


答:

0赞 max_590er 10/12/2023 #1

要从 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 组件。该方法执行查询以检索数据库时区设置,并将其作为 .DatabaseTimeZoneResolverJdbcTemplategetDatabaseTimeZone()SELECT current_setting('TIMEZONE')String

确保您的 Bean 在 Spring 应用程序上下文中配置正确。如果您的应用程序仍在返回 JVM 时区,则 PostgreSQL 数据库可能确实使用了系统时区,您可能需要检查安装 PostgreSQL 的操作系统的时区设置。JdbcTemplate

此外,如果要为 PostgreSQL 数据库设置特定时区,可以修改 PostgreSQL 配置文件(通常为 )并设置参数。修改配置后,需要重启PostgreSQL服务器才能使更改生效。postgresql.conftimezone