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
这是两步链式操作:
- 第一步:
'2024-07-01 00:00:00' AT TIME ZONE 'UTC'- 将无时区时间认定为UTC时区的本地时间,转换为带时区时间戳(timestamp with time zone),即
2024-07-01 00:00:00+00
- 将无时区时间认定为UTC时区的本地时间,转换为带时区时间戳(timestamp with time zone),即
- 第二步:对带时区时间执行
AT TIME ZONE 'PST'- 将UTC时间
2024-07-01 00:00:00+00转换为PST时区的本地时间(无时区时间戳) - 若你的结果显示为
2024-07-01 08:00:00+00,说明实际使用的时区偏移为UTC+8(可能是时区名称混淆),本质是完成了“UTC时间→目标时区本地时间”的转换,再以数据库UTC时区展示该无时区时间
- 将UTC时间
内容的提问来源于stack exchange,提问作者JuanPablo
相关产品推荐
相关产品推荐

