JDBC替代方案显示时区SQL命令



以后的问题:

显示时区 - PGADMIN和JDBC结果之间的差异

我可以通过PGADMIN在任何时区域内连接到PostgreSQL服务器,并通过:

使其返回其时区
show timezone;

但是,如果我使用JDBC并拨打相同的呼叫,则不会按预期返回外部服务器的时区文本。它返回我的客户端机器的时区,这不是我的预期行为。我期望与pgadmin相同的行为,它将外部服务器的时区返回文本。

我明白为什么JDBC会使用我的客户时区进行日期时间操作。这是非常有道理的,但是当向外部服务器询问其时区时,返回我的客户时区是没有意义的。

我真的很想通过JDBC获得外部服务器的时区,而无需事先知道该时区是什么,并且必须手动设置我的JVM的时区。

是否有其他方法可以这样做,而不是使用show timezone

PostgreSQL中的时间始终存储在UTC中,会话时区是用于连接的转换。此会话配置可以在服务器上具有默认配置。

如果您真的需要知道,请使用

select * from pg_file_settings where name = 'timezone' 

这仅在明确配置时具有一个值,否则默认值为GMT。

另请参见8.5.3。时区:

所有时区感知日期和时代都在UTC内部存储。他们 被转换为时区指定的区域中的本地时间 在显示给客户端之前的配置参数。

此配置设置指定默认会话时区,它实际上不是"服务器时区");它的配置实际上对PostgreSQL Server通常如何处理日期没有影响。

连接库可以通过指定TimeZone连接属性或在以后执行set time zone '...'来覆盖会话。

因此,这实际上不是针对PostgreSQL JDBC驱动程序的特定特定的:它通常适用于PostgreSQL,但是PostgreSQL JDBC驱动程序始终执行此操作(请参阅ConnectionFactoryImpl),以符合JDBC规范要求,该要求需要日期和时间在默认值中。JVM时区。

相关内容

  • 没有找到相关文章

最新更新