在我的 postgresql.conf 文件中,我的默认时区设置为'欧洲/伦敦'。
由于DST将于10月30日关闭,这意味着现在(10月4日我正在写作)'欧洲/伦敦' should correspond与' + 01'。
我有一个dummy
表格,time
列timestamp with timezone
类型。
对于
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管理吗?时区错了吗?我错过了什么吗?
如果我切换到任何其他时区,它总是按预期工作。
答案 0 :(得分:1)
您在Europe/London
时区内输入的时间戳。
12月25日,伦敦将从UTC返回0小时,因此中午将在12:00 UTC。
时区Europe/London
不与时区+01
相同,至少不是所有时间。