为什么 Postgres 不识别我的 DST?
Why does Postgres not recognize my DST?
在我的 postgresql.conf 文件中,我的默认时区设置为 'Europe/London'.
由于夏令时将在 10 月 30 日关闭,这意味着 现在(我写作时是 10 月 4 日)'Europe/London' should correspond 与 ' +01'.
我有一个 dummy
table 和 time
类型的 timestamp with timezone
列。
Postgres specs 说明:
For timestamp with timezone
, the internally stored value is always in UTC (Universal Coordinated Time, traditionally known as Greenwich Mean Time, GMT). An input value that has an explicit time zone specified is converted to UTC using the appropriate offset for that time zone. If no time zone is stated in the input string, then it is assumed to be in the time zone indicated by the system's TimeZone parameter, and is converted to UTC using the offset for the timezone zone.
至于加粗的那句,如果我这样插入:
INSERT INTO dummy VALUES ('2016-12-25 12:00:00.000')
我希望它被解释为 'Europe/London' 时区,因此 '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 |
我无法理解这种行为的原因。 'Europe/London'时区的夏令时管理有误吗?我错过了什么吗?
如果我切换到任何其他时区,它总是按预期工作。
您输入的时间戳 是 在 Europe/London
时区中解释的。
12 月 25 日,伦敦将从 UTC 偏移 0 小时,因此中午将在 12:00 UTC。
时区 Europe/London
与时区 +01
不同,至少不是一直如此。
在我的 postgresql.conf 文件中,我的默认时区设置为 'Europe/London'.
由于夏令时将在 10 月 30 日关闭,这意味着 现在(我写作时是 10 月 4 日)'Europe/London' should correspond 与 ' +01'.
我有一个 dummy
table 和 time
类型的 timestamp with timezone
列。
Postgres specs 说明:
For
timestamp with timezone
, the internally stored value is always in UTC (Universal Coordinated Time, traditionally known as Greenwich Mean Time, GMT). An input value that has an explicit time zone specified is converted to UTC using the appropriate offset for that time zone. If no time zone is stated in the input string, then it is assumed to be in the time zone indicated by the system's TimeZone parameter, and is converted to UTC using the offset for the timezone zone.
至于加粗的那句,如果我这样插入:
INSERT INTO dummy VALUES ('2016-12-25 12:00:00.000')
我希望它被解释为 'Europe/London' 时区,因此 '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 |
我无法理解这种行为的原因。 'Europe/London'时区的夏令时管理有误吗?我错过了什么吗?
如果我切换到任何其他时区,它总是按预期工作。
您输入的时间戳 是 在 Europe/London
时区中解释的。
12 月 25 日,伦敦将从 UTC 偏移 0 小时,因此中午将在 12:00 UTC。
时区 Europe/London
与时区 +01
不同,至少不是一直如此。