我在UTC(timestamp with time zone
)有个约会:
test=# select ('2018-05-31T21:00:00+00'::timestamptz);
timestamptz
------------------------
2018-05-31 21:00:00+00
(1 row)
我想将其转换为另一个时区,例如UTC + 2。文档指出at time zone
应该为我做:
专业
<timestamp with time zone> AT TIME ZONE <zone>
返回类型
timestamp without time zone
说明
将没有时区指定的带时区的给定时间戳转换为新时区
请参见here。
但是当我尝试这样做时,却得到了奇怪的结果:
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
的原因)。
我在这里做什么错了?
答案 0 :(得分:1)
您的问题是according to the documentation颁布的POSIX标准
要记住的另一个问题是,在POSIX时区名称中,格林威治以西的位置使用正偏移量。 PostgreSQL在其他任何地方都遵循ISO-8601约定,正时区偏移量位于格林威治以东。