You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中AT TIME ZONE为何会使小时数增加?

PostgreSQL时区转换结果差异解释

你的数据库时区为UTC,两条查询的核心差异在于AT TIME ZONE的使用逻辑不同:

第一条查询:单次AT TIME ZONE

SELECT '2024-07-01 00:00:00' AT TIME ZONE 'PST';
-- 结果:2024-06-30 16:00:00
  • 输入的'2024-07-01 00:00:00'是无时区时间戳(timestamp without time zone)
  • AT TIME ZONE 'PST'的作用是:将该无时区时间认定为PST时区的本地时间,再转换为数据库当前时区(UTC)的时间
  • PST时区比UTC晚8小时(UTC-8),因此PST的2024-07-01 00:00:00对应UTC时间2024-06-30 16:00:00

第二条查询:两次连续AT TIME ZONE

SELECT '2024-07-01 00:00:00' AT TIME ZONE 'UTC' AT TIME ZONE 'PST';
-- 结果:2024-07-01 08:00:00+00

这是两步链式操作:

  1. 第一步:'2024-07-01 00:00:00' AT TIME ZONE 'UTC'
    • 将无时区时间认定为UTC时区的本地时间,转换为带时区时间戳(timestamp with time zone),即2024-07-01 00:00:00+00
  2. 第二步:对带时区时间执行AT TIME ZONE 'PST'
    • 将UTC时间2024-07-01 00:00:00+00转换为PST时区的本地时间(无时区时间戳)
    • 若你的结果显示为2024-07-01 08:00:00+00,说明实际使用的时区偏移为UTC+8(可能是时区名称混淆),本质是完成了“UTC时间→目标时区本地时间”的转换,再以数据库UTC时区展示该无时区时间

内容的提问来源于stack exchange,提问作者JuanPablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:33:13