postgresql中的时区转换

postgresql中的时区转换,postgresql,Postgresql,我有UTC的日期(带时区的时间戳): 我想将其转换为另一个时区,例如UTC+2。文档中指出,时区的应该为我这样做: 表达 时区的 返回类型 无时区的时间戳 说明 将带有时区的给定时间戳转换为不带时区名称的新时区 看 但当我尝试这样做时,我得到了奇怪的结果: test# select ('2018-05-31T21:00:00+00'::timestamptz) at time zone 'utc+2'; timezone --------------------- 2

我有UTC的日期(
带时区的时间戳
):

我想将其转换为另一个时区,例如UTC+2。文档中指出,时区的
应该为我这样做:

表达
时区的

返回类型
无时区的时间戳

说明
将带有时区的给定时间戳转换为不带时区名称的新时区

但当我尝试这样做时,我得到了奇怪的结果:

test# select ('2018-05-31T21:00:00+00'::timestamptz) at time zone 'utc+2';
      timezone       
---------------------
 2018-05-31 19:00:00
(1 row)
我很确定UTC的21小时等于UTC+2的23小时(毕竟这就是
+2
的原因)


我做错了什么?

您的问题是POSIX标准规定

另一个需要记住的问题是,在POSIX时区名称中,正偏移量用于格林威治以西的位置。在其他地方,PostgreSQL遵循ISO-8601约定,即正时区偏移位于格林威治以东

test# select ('2018-05-31T21:00:00+00'::timestamptz) at time zone 'utc+2';
      timezone       
---------------------
 2018-05-31 19:00:00
(1 row)