将UTC时间戳转换为timestamptz

时间:2017-07-15 16:01:01

标签: postgresql timezone timestamp

如何将UTC中的timestamp转换为timestamptz

如果我的当地时区是GMT-1而且我跑:

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

我明白了:

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

但我想:

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

2 个答案:

答案 0 :(得分:1)

更好的解决方案:

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

你需要的只是AT TIME ZONE构造,之后没有额外的演员。它会为timestamptz输入返回timestamp,反之亦然。

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

确切地说,没有“UTC时间戳”这样的东西。 timestamp不包含时区信息。只有您知道 假设 才能位于UTC时区。

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

详细说明:

答案 1 :(得分:0)

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