如何将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
如何将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
更好的解决方案:
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 发生也是用于输入的时区。
详细说明:
解决方案:select ('2017-01-01 00:00:00' at time zone 'utc')::timestamptz