如何将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
答案 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