PostgreSQL中的时区转换不一致[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL中的时区转换不一致[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
我试图从PostgreSQL数据库中的timestamptz
字段中选择当地时间(如在澳大利亚/布里斯班)并注意到当我使用+10
时区缩写时,PostgreSQL似乎从UTC值减去10小时而不是添加10小时。
如果我使用AEST
作为缩写,则正确添加10小时。
当我运行以下查询时,我希望返回的两个值都是相同的。
select
('2018-01-01T00:00:00Z'::timestamp with time zone) at time zone 'AEST',
('2018-01-01T00:00:00Z'::timestamp with time zone) at time zone '+10';
但是,在我的情况下,我看到以下结果:
"2018-01-01 10:00:00" | "2017-12-31 14:00:00"
如果我运行以下查询,则所有行的“utc_offset”间隔为10:00:00。
select * from pg_timezone_names
where abbrev in ('+10', 'AEST')
谁能提供关于这里发生了什么的解释?
答案
这实际上在the documentation中有一些细节描述:
PostgreSQL允许您以三种不同的形式指定时区:
- 全时区名称,例如
America/New_York.
[...]- 时区缩写,例如
PST
。 [...]- 除了时区名称和缩写外,PostgreSQL还将接受形式为
STDoffset
或STDoffsetDST
的POSIX风格时区规格,其中STD
是区域缩写,offset
是UTC以西的小时数字偏移,DST
是可选日光 - 储蓄区缩写,假定在给定偏移之前一小时。 [...][...]
另外要记住的一个问题是,在POSIX时区名称中,正偏移用于格林威治以西的位置。在其他地方,PostgreSQL遵循ISO-8601惯例,正面时区偏移位于格林威治以东。
因此,AEST
的POSIX等价物将是-10
或UTC-10
。
以上是关于PostgreSQL中的时区转换不一致[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在特殊时区将当前日期和时间转换为PHP中的十进制(16,4)[重复]
PostgreSQL 错误地从没有时区的时间戳转换为有时区的时间戳
PostgresQL + Spring JPA:org.postgresql.util.PSQLException:错误:无法将类型 bytea 转换为没有时区的时间戳