(这是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中完全忽略时区