postgresql 将UTC中的时间戳转换为timestamptz

rqqzpn5f  于 2023-01-12  发布在  PostgreSQL
关注(0)|答案(2)|浏览(182)

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

fnvucqvd

fnvucqvd1#

更好:

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

AT TIME ZONE构造之后没有额外的强制转换。它为timestamp without time zone(= timestamp)输入返回timestamp with time zone(= timestamptz),反之亦然。
对于给定的示例,提供时间戳常量的最短、最有效的方法是timestamp '2017-01-01',或者使用类型转换,效果几乎一样好:'2017-01-01'::timestamp。当缺失时,假定时间分量00:00:00
没有"时间戳是UTC"这样的东西,timestamp不携带时区信息,只有你知道它应该位于UTC时区。
类型名"带时区的时间戳"有点误导。timestamptz也不携带任何时区信息。给定的时区名,缩写或偏移量用于计算相应的UTC时间。文本输出(显示)适用于会话的当前时区设置。仅存储相应UTC时间的裸值。时区本身从不存储。如果需要,可以将其另外存储在另一列中。在您的特定情况下,UTC * 恰好也是用于输入的时区。
详细说明:

  • 时区存储为数据类型"带时区的时间戳"
  • 在Rails和PostgreSQL中完全忽略时区
h79rfbju

h79rfbju2#

溶液:select ('2017-01-01 00:00:00' at time zone 'utc')::timestamptz

相关问题