【发布时间】:2015-04-09 19:19:03
【问题描述】:
我们将时间戳转换为纪元,对它们进行一些数学运算,然后将它们转换回时间戳。数据库中的所有时间都是TIMESTAMP WITHOUT TIME ZONE。
由于在英国这里切换到夏令时时间在一台服务器上关闭了一个小时,但在另一台服务器上没有,所以我做了一个小测试:
SHOW SERVER_VERSION;
SHOW TIMEZONE;
SELECT extract(EPOCH FROM TIMESTAMP '1970-01-01');
我在一台服务器上
server_version
----------------
9.1.15
(1 row)
TimeZone
----------
GB
(1 row)
date_part
-----------
0
(1 row)
但另一方面
server_version
----------------
9.3.6
(1 row)
TimeZone
----------
GB
(1 row)
date_part
-----------
-3600
(1 row)
是否有任何服务器设置可能导致此问题?
或者extract 的行为在 Postgres 9.1 之后发生了变化?
【问题讨论】:
-
猜测:试试
SELECT extract(EPOCH FROM TIMESTAMP '1970-01-01'::timestamp with time zone); -
一般来说,在问题的上下文中更有意义的基础是
'1970-01-01'::timestamp at time zone 'GMT'。从中提取纪元应该在 9.2 之前和 9.2 之后的版本中都可以正常工作
标签: postgresql postgresql-9.1 postgresql-9.3