如何将字符串视为UTC时间戳?

时间:2019-06-08 07:48:29

标签: postgresql timezone

我必须读取诸如'20190608070000'之类的字符串作为UTC中给出的时间戳。有没有简单的方法可以做到这一点?

这需要UTC,但需要格式化输入:

postgres=# show time zone;
 TimeZone
----------
 CET
(1 Zeile)

postgres=# select timestamp without time zone '2019-06-08 07:00:00' at time zone 'UTC';
        timezone
------------------------
 2019-06-08 09:00:00+02
(1 Zeile)

据我所知,to_timestamp()始终将所有输入视为本地时间,因此输出被错误地移位:

postgres=# SELECT to_timestamp('20190608070000', 'YYYYMMDDHH24MISS') AT time zone 'UTC';
      timezone
---------------------
 2019-06-08 05:00:00
(1 Zeile)

实际上我正在使用PostgreSQL 9.6。

1 个答案:

答案 0 :(得分:1)

TO_TIMESTAMP的返回类型为timestamp with time zone。显示的时间是您当前会话的时区(带有UTC偏移)。

SET SESSION timezone TO 'CET';
SET
knayak=# SELECT to_timestamp('20190608070000', 'YYYYMMDDHH24MISS');
      to_timestamp
------------------------
 2019-06-08 07:00:00+02

当您使用AT TIME ZONE进行转换时,它将以UTC表示当前时区中07:00小时的时间。

SELECT to_timestamp('20190608070000', 'YYYYMMDDHH24MISS') AT time zone 'UTC';
      timezone
---------------------
 2019-06-08 05:00:00
(1 row)

因此,如果您希望以所需的格式读取时间戳并将其视为UTC,请将to_timestamp的输出显式转换为timestamp(无时区),然后应用{{1} }。

AT TIME ZONE