首页 > 解决方案 > 在 postgresql 中的时区之间转换

问题描述

我有一个 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应该为我做这件事:

Experession返回类型描述 将给定的带有时区的时间戳转换为新的时区,不指定时区
<timestamp with time zone> AT TIME ZONE <zone>

timestamp without time zone

这里

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

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毕竟这就是 的原因)。

我在这里做错了什么?

标签: postgresql

解决方案


您的问题是根据文档规定的 POSIX 标准

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


推荐阅读