Postgres在时区' + 07'语法

时间:2018-01-29 06:29:10

标签: postgresql-9.6

我最近在postgres中遇到了timestamptz的麻烦。我现在明白,时间总是在数据库中保存为utc,插入和取出的内容取决于连接中设置的内容。 This博客文章帮助澄清了最初的混淆。

但是在搜索连接所具有的时区时安全的语法时,我仍然遇到了一些奇怪的事情:

postgres=# show timezone;
 TimeZone 
----------
 UTC
(1 row)

postgres=# select '2000-01-01 00:00:00+07' at time zone 'GMT+07', '2000-01-01 00:00:00+07' at time zone 'Asia/Jakarta';
      timezone       |      timezone       
---------------------+---------------------
 1999-12-31 10:00:00 | 2000-01-01 00:00:00
(1 row)

postgres=# select current_timestamp, current_timestamp at time zone 'GMT+07', current_timestamp at time zone 'Asia/Jakarta';
              now              |          timezone          |          timezone          
-------------------------------+----------------------------+----------------------------
 2018-01-29 06:17:07.845564+00 | 2018-01-28 23:17:07.845564 | 2018-01-29 13:17:07.845564
(1 row)

因此,'Asia/Jakarta'的版本按预期工作,但'+7''+07''GMT+07''UTC+07'为我提供了预期的时间戳减去14小时。

为什么会发生这种情况以及将timestamptz转换为独立于连接时区的不同时区的正确方法是什么?

0 个答案:

没有答案