在PostgreSQL中的时区之间转换

时间:2018-10-24 08:12:27

标签: 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应该为我做:

  

专业
  <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的原因)。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

您的问题是according to the documentation颁布的POSIX标准

  

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