查询时区 - 数据库服务器和客户端计算机具有不同的时区



(这是PostgreSQL时间戳中时区存储的后续操作)

我使用的是PostgreSQL 9.x,数据库服务器的默认时区为+9,例如,它有一个包含timezone类型列的表。

数据库所在的服务器上有一个Java程序,它从数据库中查询数据。数据库所在的服务器和Java服务器程序的客户端(浏览器)都位于时区-8

我的问题是:

  • 客户(brower)是否会显示9-(-8)=17小时前的原始日期时间或调整后的日期时间
  • 如果我想在浏览器客户端中获得与数据库原始值相同的数据,我应该更改Java服务器机器或客户端机器的时区,还是同时更改两者
    (我知道最好让数据库及其服务器具有相同的时区,但我们假设由于某种原因,他们现在没有设置相同的时区。)

总是获得same data in browser client as the db original value。有很多不同的方式来显示同一时间点(在不同的时区)。两个示例(timestamptz值的文本表示):

'2012-03-05 20:00:00+03'
'2012-03-05 18:00:00+01'

相同的

就Postgres而言,服务器的时区设置与此完全无关。唯一相关的是会议的设置。唯一改变的是值的显示。它总是在同一个时间点。

因此,只需在会话中设置时区即可获得相应的文本表示:

  • 设置PostgreSQL实例的时区
  • PostgreSQL在不同时区的转储和恢复
  • 设置时间戳列';s在PostgreSQL中的时区

另一种选择是AT TIME ZONE构造。将timestamp作为本地timestamp without time zone:

SELECT my_timestamptz_column AT TIME ZONE '-8';

当处理table that contains a column of timezone type时,这可能是更好的方法,因为时区可以对每一行进行更改。

同样,所有这些都在参考答案中:

  • 在Rails和PostgreSQL中完全忽略时区

相关内容

  • 没有找到相关文章