PostgreSQL中GMT+1时区时间减间隔为何结果加1小时?
问题原因与解决方法
你的查询结果不符合预期,核心问题出在PostgreSQL对GMT+1字符串的解析逻辑上:
- 你预期
'MAR 18 2024 16:30 GMT+1'被解析为UTC+1时区的16:30,对应UTC时间15:30,减1分钟后应为15:29 UTC。 - 但PostgreSQL将
GMT+1错误解读为「GMT时区的时间加上1小时」,导致原时间的UTC等价时间为17:30(GMT时间16:30 + 1小时),因此减1分钟后得到17:29 UTC。
解决办法
使用无歧义的时区表示方式:
- 标准时区偏移格式
用+01或+0100替代GMT+1,让PostgreSQL正确识别时区偏移:
SELECT ( ('MAR 18 2024 16:30 +01'::TIMESTAMP WITH TIME ZONE) - ('1 minute'::INTERVAL) );
执行后会返回你预期的2024-03-18 15:29:00.000000 +00:00。
- 明确时区名称
使用具体的时区名称(如Europe/Paris),彻底避免偏移格式的歧义:
SELECT ( ('MAR 18 2024 16:30 Europe/Paris'::TIMESTAMP WITH TIME ZONE) - ('1 minute'::INTERVAL) );
内容的提问来源于stack exchange,提问作者OctaviaLo
相关产品推荐
相关产品推荐

