2017-07-15 205 views
1

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

如果我的本地时区为GMT-1和I运行:

select '2017-01-01 00:00:00'::timestamptz

我得到:

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

,但我想:

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

回答

1

更好的解决方案:

SELECT timestamp '2017-01-01 00:00:00' AT TIME ZONE 'UTC'; 

所有你需要的是AT TIME ZONE结构,之后没有附加的演员。它为timestamp输入返回timestamptz,反之亦然。

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

准确地说,没有这样的东西,例如“UTC中的时间戳”。 A timestamp不带时区信息。只有你知道这是假设位于UTC时区。

为了完整起见,类型名称“带时区的时间戳”有点令人误解。 timestamptz也不带任何时区信息。给定的时区名称,缩写或偏移量用于计算相应的UTC时间。标准显示屏适用于会话的当前时区设置。但只存储相应UTC时间的裸值。时区本身从不存储。如果你需要它,你必须将它明确地存储在另一列中。在您的具体情况下,UTC 发生也是用于输入的时区。

详细说明:

0

解决方案:select ('2017-01-01 00:00:00' at time zone 'utc')::timestamptz