在PostgreSQL时区偏移量中使用了错误的符号

时间:2019-05-20 08:59:38

标签: database postgresql timezone timezone-offset

我正在尝试使用PostgreSQL TIME数据类型,并且发现了奇怪的行为。

test=# SELECT CURRENT_TIME;
current_time
--------------------
08:43:35.446737+00
(1 row)

test=# SELECT CURRENT_TIME  AT TIME ZONE '+04';
timezone
--------------------
04:43:50.475164-04
(1 row)

test=# SELECT CURRENT_TIME  AT TIME ZONE '-04';
  timezone
--------------------
12:43:54.810124+04
(1 row)

您会注意到,默认时区为 00 ,因此,当我将其转换为 +04 时,我希望得到的结果与< strong> -04

是否有人知道这种行为背后的原因,或者这是一个错误

1 个答案:

答案 0 :(得分:1)

您正在使用POSIX样式的时区名称,这有点奇怪。来自the docs

  

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

此外,来自同一文档:

  

我们不建议使用带时区的时间类型(尽管PostgreSQL支持遗留应用程序并符合SQL标准)。