PostgreSQL中的时区转换不一致
我试图从PostgreSQL数据库中的PostgreSQL中的时区转换不一致,postgresql,timezone,postgresql-10,Postgresql,Timezone,Postgresql 10,我试图从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-01T
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_偏移量”间隔均为10:00:00
select * from pg_timezone_names
where abbrev in ('+10', 'AEST')
有人能解释一下这里发生了什么事吗 这实际上在以下部分中有详细描述: PostgreSQL允许您以三种不同的形式指定时区:
- 完整的时区名称,例如
[…]美国/纽约。
- 时区缩写,例如
。[……]PST
- 除了时区名称和缩写外,PostgreSQL还将接受POSIX风格的时区规范,格式为
或STDoffset
,其中STDoffsetDST
是一个时区缩写,STD
是一个以小时为单位的数值偏移量,从UTC往西,而offset
是一个可选的夏令时区缩写,假定在给定偏移量之前一小时。[……]DST
因此,
AEST
的POSIX等价物应该是-10
或UTC-10
,我想你是这样的;We’我们正在看这个的副本:为什么不在时区“澳大利亚/布里斯班”通过
?谢谢Laurenz,在更仔细地阅读了文档之后,这现在是有意义的。我曾认为,由于pg_timezone_names视图中许多行的“+10”位于“abbrev”字段中,因此它将从此处开始。我没有提到pg_时区_abbrevs视图和POSIX偏移量位于GMT以西。