将 UTC 时间戳转换为 timestamptz

Cod*_*ode 5 postgresql timezone timestamp

如何将timestampUTC 格式转换为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

Erw*_*ter 13

更好的:

SELECT timestamp '2017-01-01 00:00:00' AT TIME ZONE 'UTC';
Run Code Online (Sandbox Code Playgroud)

构造后无需额外转换AT TIME ZONE。对于( timestamp with time zone= ) 输入,它返回( = ),反之亦然。timestamptztimestamp without time zonetimestamp

对于给定的示例,提供时间戳常量的最短、最有效的方法是timestamp '2017-01-01'。或者使用强制转换,几乎一样好:'2017-01-01'::timestamp00:00:00缺失时假定时间部分。

不存在“UTC 时间戳”这样的东西。Atimestamp不携带时区信息。只有您知道它应该位于 UTC 时区。

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

详细解释: