查询时区 - 数据库服务器和客户端机器有不同的时区
Query timezone - db server & client machine have different time zones
(这是 的后续)
我正在使用 PostgreSQL 9.x,例如,数据库服务器的默认时区为 +9
,它有一个 table,其中包含一个 timezone
类型的列。
有一个Java程序与数据库在同一台服务器上,它从数据库中查询数据。数据库所在的服务器和 Java 服务器程序的客户端(浏览器)都在时区 -8
.
我的问题是:
- 客户端(浏览器)是否会显示原始日期时间或调整后的日期时间提前 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而言,服务器的时区设置与此完全无关。唯一相关的是会话的设置。唯一改变的是值的显示。始终是同一时间点。
因此只需在您的会话中设置时区即可获得相应的文本表示:
- Set timezone of PostgreSQL instance
- PostgreSQL dump and restore in different timezone
- Set timestamp column's timezone in PostgreSQL
另一种选择是 AT TIME ZONE
结构。将 timestamp
作为 local timestamp without time zone
:
SELECT my_timestamptz_column AT TIME ZONE '-8';
处理 table that contains a column of timezone type
时,这可能是更好的方法,因为每一行的时区都可能发生变化。
同样,所有这些都在参考答案中:
- Ignoring timezones altogether in Rails and PostgreSQL
(这是
我正在使用 PostgreSQL 9.x,例如,数据库服务器的默认时区为 +9
,它有一个 table,其中包含一个 timezone
类型的列。
有一个Java程序与数据库在同一台服务器上,它从数据库中查询数据。数据库所在的服务器和 Java 服务器程序的客户端(浏览器)都在时区 -8
.
我的问题是:
- 客户端(浏览器)是否会显示原始日期时间或调整后的日期时间提前 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而言,服务器的时区设置与此完全无关。唯一相关的是会话的设置。唯一改变的是值的显示。始终是同一时间点。
因此只需在您的会话中设置时区即可获得相应的文本表示:
- Set timezone of PostgreSQL instance
- PostgreSQL dump and restore in different timezone
- Set timestamp column's timezone in PostgreSQL
另一种选择是 AT TIME ZONE
结构。将 timestamp
作为 local timestamp without time zone
:
SELECT my_timestamptz_column AT TIME ZONE '-8';
处理 table that contains a column of timezone type
时,这可能是更好的方法,因为每一行的时区都可能发生变化。
同样,所有这些都在参考答案中:
- Ignoring timezones altogether in Rails and PostgreSQL