Java JDBC显示时区SQL命令的替代方法

Java JDBC显示时区SQL命令的替代方法,java,postgresql,jdbc,timezone,Java,Postgresql,Jdbc,Timezone,继我的上一个问题之后: 我可以通过pgAdmin连接到任何时区的PostgreSQL服务器,并通过以下方式使其返回其时区: show timezone; 但是,如果我使用JDBC并进行相同的调用,它不会像预期的那样返回外部服务器的时区文本。它返回客户端计算机的时区,这不是我预期的行为。我期望与pgAdmin的行为相同,它以文本形式返回外部服务器的时区 我理解为什么JDBC会使用我的客户机时区进行日期时间操作。这很有道理,但是当请求外部服务器提供其时区时,它返回我的客户机时区是没有意义的 我真

继我的上一个问题之后:

我可以通过pgAdmin连接到任何时区的PostgreSQL服务器,并通过以下方式使其返回其时区:

show timezone;
但是,如果我使用JDBC并进行相同的调用,它不会像预期的那样返回外部服务器的时区文本。它返回客户端计算机的时区,这不是我预期的行为。我期望与pgAdmin的行为相同,它以文本形式返回外部服务器的时区

我理解为什么JDBC会使用我的客户机时区进行日期时间操作。这很有道理,但是当请求外部服务器提供其时区时,它返回我的客户机时区是没有意义的

我真的很想通过JDBC获取外部服务器的时区,而不必事先知道该时区是什么,也不必手动设置JVM的时区,因为这会破坏我尝试调用的目的


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

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

如果你真的需要知道,使用

select * from pg_file_settings where name = 'timezone' 
仅当显式配置时,才会有一个值,否则默认值为GMT

另见:

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

此配置设置指定默认会话时区,它实际上不是“服务器时区”);它的配置实际上并不影响PostgreSQL server处理日期的方式

连接库可以通过指定
时区
连接属性,或稍后执行
设置时区“…”
来覆盖会话


因此,这实际上并不特定于PostgreSQL JDBC驱动程序:它通常适用于PostgreSQL,但PostgreSQL JDBC驱动程序总是这样做(请参见)以符合JDBC规范要求,即日期和时间必须在默认JVM时区中。

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

如果你真的需要知道,使用

select * from pg_file_settings where name = 'timezone' 
仅当显式配置时,才会有一个值,否则默认值为GMT

另见:

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

此配置设置指定默认会话时区,它实际上不是“服务器时区”);它的配置实际上并不影响PostgreSQL server处理日期的方式

连接库可以通过指定
时区
连接属性,或稍后执行
设置时区“…”
来覆盖会话


因此,这实际上并不特定于PostgreSQL JDBC驱动程序:它通常适用于PostgreSQL,但PostgreSQL JDBC驱动程序总是这样做(请参阅)以符合JDBC规范要求,即日期和时间必须在默认JVM时区内。

请包含您正在使用的代码。没有它,读者只能猜测你在做什么;代码使其明确无误。只是想一想,您是否可以从服务器中检索
current\u timestamp
localtimestamp
,然后减去?据我所知,它最多不会给您提供与UTC的当前偏移量。您需要服务器的时区做什么?也许有另一种方法。“你需要服务器的时区做什么?也许有另一种方法。”-这不是一个迫切需要的要求。我们从我的办公室管理多台服务器,我用它来检查postgresql设置中的时区设置是否正确。当然,有其他方法可以做到这一点,但我正在寻找一种简单的方法来询问外部服务器的时区。这就是全部。为什么不呢?:)不,为什么不呢?谢谢你的解释@请包含您正在使用的代码。没有它,读者只能猜测你在做什么;代码使其明确无误。只是想一想,您是否可以从服务器中检索
current\u timestamp
localtimestamp
,然后减去?据我所知,它最多不会给您提供与UTC的当前偏移量。您需要服务器的时区做什么?也许有另一种方法。“你需要服务器的时区做什么?也许有另一种方法。”-这不是一个迫切需要的要求。我们从我的办公室管理多台服务器,我用它来检查postgresql设置中的时区设置是否正确。当然,有其他方法可以做到这一点,但我正在寻找一种简单的方法来询问外部服务器的时区。这就是全部。为什么不呢?:)不,为什么不呢?谢谢你的解释@马诺德斯普伦迪德。谢谢你,马克。不适用于9.4数据库,但我肯定可以继续使用它。它(大部分)为我提供了我们管理的9.6数据库所需的功能。他们中的大多数已经升级到了9.6版本,其余的都要升级。它回报了我现在所期望的。其中一些设置为“localtime”,因此没有显式返回其实际时区,但我可以接受,因为这对我来说仍然是一个有效的响应。我感谢你在这里的时间和努力。我确实理解通过JDBC及其会话的限制。你的解决方案弥补了这一差距。荣誉:)太好了。谢谢你,马克。不适用于9.4数据库,但我肯定可以继续使用它。它(大部分)给了我w