Postgresql 将UTC中的时间戳转换为时间戳

Postgresql 将UTC中的时间戳转换为时间戳,postgresql,timezone,timestamp,Postgresql,Timezone,Timestamp,如何将UTC中的时间戳转换为时间戳 如果我的本地时区是GMT-1,并且我运行: 选择“2017-01-01 00:00:00”::timestamptz 我得到: 2017-01-01 00:00:00-01 但我想: 2017-01-01 01:00:00-01解决方案:select('2017-01-01 00:00:00'在时区utc')::timestamtz更好的解决方案: SELECT timestamp '2017-01-01 00:00:00' AT TIME ZONE 'UTC

如何将UTC中的
时间戳
转换为
时间戳

如果我的本地时区是GMT-1,并且我运行:

选择“2017-01-01 00:00:00”::timestamptz

我得到:

2017-01-01 00:00:00-01

但我想:

2017-01-01 01:00:00-01
解决方案:
select('2017-01-01 00:00:00'在时区utc')::timestamtz
更好的解决方案:

SELECT timestamp '2017-01-01 00:00:00' AT TIME ZONE 'UTC';
你所需要的只是时区的
构造,之后就不需要额外的施法了。对于
timestamp
输入,它返回
timestamp
,反之亦然

对于本演示,提供时间戳常量的最短、最有效的方法是
timestamp'2017-01-01 00:00:00'
。或者使用石膏,几乎一样好:
'2017-01-01 00:00:00'::timestamp

准确地说,没有“UTC时间戳”这样的东西。
时间戳
不携带时区信息。只有您知道它应该位于UTC时区

为完整起见,类型名称“带时区的时间戳”有点误导
timestamptz
也不携带任何时区信息。给定的时区名称、缩写或偏移量用于计算相应的UTC时间。标准显示将根据会话的当前时区设置进行调整。但仅存储相应UTC时间的裸值。时区本身从未被存储。如果需要,必须将其显式存储在另一列中。在您的特定情况下,UTC恰好也是用于输入的时区

详细说明: