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 * 恰好也是用于输入的时区。 详细说明:
2条答案
按热度按时间fnvucqvd1#
更好:
在
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 * 恰好也是用于输入的时区。详细说明:
h79rfbju2#
溶液:
select ('2017-01-01 00:00:00' at time zone 'utc')::timestamptz