为什么Postgres不能识别我的夏令时?

时间:2016-10-04 10:21:08

标签: postgresql timestamp-with-timezone

在我的 postgresql.conf 文件中,我的默认时区设置为'欧洲/伦敦'。

由于DST将于10月30日关闭,这意味着现在(10月4日我正在写作)'欧洲/伦敦' should correspond与' + 01'。

我有一个dummy表格,timetimestamp with timezone类型。

Postgres specs声明:

  

对于timestamp with timezone,内部存储的值始终为UTC(通用协调时间,传统上称为格林威治标准时间,GMT)。具有指定显式时区的输入值将使用该时区的适当偏移量转换为UTC。 如果输入字符串中未指定时区,则假定它位于系统的TimeZone参数指示的时区中,并使用时区的偏移量转换为UTC。

至于粗体句子,如果我做这个插入:

INSERT INTO dummy VALUES ('2016-12-25 12:00:00.000')

我希望它被解释为“欧洲/伦敦'时区,因此'2016-12-25 12:00:00.000+01'

因此,当我将其检索时,我希望能够显示该值(或至少相当于'2016-12-25 11:00:00.000+00')。

相反,如果我进行查询

SELECT * FROM dummy

我退回了这个:

|time                    |
|timestamp with time zone|
--------------------------
|2016-12-25 12:00:00+00  |

我无法理解这种行为。是欧洲/伦敦'的DST管理吗?时区错了吗?我错过了什么吗?

如果我切换到任何其他时区,它总是按预期工作。

1 个答案:

答案 0 :(得分:1)

您在Europe/London时区内输入的时间戳

12月25日,伦敦将从UTC返回0小时,因此中午将在12:00 UTC。

时区Europe/London 与时区+01相同,至少不是所有时间。