在时区GMT插入current_timestamp会提供本地时间

时间:2019-01-22 22:41:21

标签: postgresql sql-timestamp

我有一个PostgreSQL数据库,发票表中有一个日期字段:

Column           |           Type           |
payment_date     | timestamp with time zone | 

该服务器位于GMT-5,如您所见:

$date
Tue Jan 22 17:33:01 EST 2019

通过PostgreSQL命令获取GMT时间会给我:

select current_timestamp at time zone 'GMT';
          timezone
----------------------------
 2019-01-22 22:33:01.087354

问题是当我执行插入/更新时:

update invoices set payment_date = current_timestamp at time zone 'GMT'

然后,当我得到查询结果时...

select payment_date from invoices

它给了我

2019-01-22 22:33:01.087354-05 

错!应该给我 2019-01-22 22:33:01.087354- 00

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

您的字段payment_date是(正确)类型timestamp with time zone,因此使用您的会话时区来转换timestamp without time zone操作的结果AT TIME ZONE

PostgreSQL的timestamp with time zone数据类型存储时区信息,它存储UTC时间戳,该时间戳转换为显示的会话时区。

最好将时间戳记存储为timestamp with time zone,并在显示时将其转换为所需的时区。