【发布时间】:2014-10-29 11:10:21
【问题描述】:
那些给出正确的结果:
SET TIME ZONE '-04'; 或 SET TIME ZONE INTERVAL '-04:00';
SELECT current_setting('TIMEZONE'), now();
current_setting | now
-----------------+-------------------------------
-04:00:00 | 2014-10-29 06:45:35.694796-04
虽然这些是倒置的:
SET TIME ZONE '-04:00';
SELECT current_setting('TIMEZONE'), now();
current_setting | now
-----------------+-------------------------------
-04:00 | 2014-10-29 14:52:25.322796+04
SET TIME ZONE '-04:00:00';
SELECT current_setting('TIMEZONE'), now();
current_setting | now
-----------------+-------------------------------
-04:00:00 | 2014-10-29 14:52:33.591539+04
我做错了什么?
【问题讨论】:
-
我认为这是一个错误。这是因为 POSIX 时区与“正常”时区相反。请通过错误报告表单提出此问题。
-
@CraigRinger 根据下面的答案,你还认为这是一个错误吗?也许至少这种记录在案的行为值得一些改进,比如在没有识别出 POSIX 样式的时区时发出警告,或者在我们想要使用 POSIX 样式时需要明确的格式?
-
我认为这是一个记录在案的错误 ;-) 。我知道 POSIX 时区处理很丑陋,但没有意识到它是如此丑陋。为此,我们确实需要
strict模式。所以它不是新的,也没有必要报告它,但是......糟糕。 -
@CraigRinger
current_setting('TIMEZONE')怎么样?它没有准确报告内部值,因为在显示-04:00:00时,这可能意味着内部-04或+04。SHOW TIMEZONE;也一样。 documentation 中没有关于此的内容。这是一个错误吗?
标签: postgresql timezone