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

PostgreSQL AT TIME ZONE函数异常求助:时区结果不符

问题:PostgreSQL中Europe/Tirana时区转换结果不符合预期

运行以下查询时,误以为Europe/Tirana在2023-01-16的时区为CEST,预期结果均为2023-01-16 16:39:24.824000,但实际返回结果如下:

执行的SQL语句:

select '2023-01-16 14:39:24.824000 +00:00' at time zone 'Europe/Tirane';
select '2023-01-16 14:39:24.824000 +00:00' at time zone 'CEST';

实际返回结果:

2023-01-16 15:39:24.824000
2023-01-16 16:39:24.824000

可见Europe/Tirana未返回预期结果,已尝试使用::timestamptz等方法但结果未变,请问该异常行为的原因是什么?


原因分析
  1. 时区规则的时间范围差异
    你的查询目标日期是2023-01-16,此时阿尔巴尼亚尚未启用永久夏令时(CEST):根据国际时区规则,阿尔巴尼亚是从2023年3月26日起才开始永久使用CEST(UTC+2),在此之前的冬季时段(包括2023年1月)仍遵循原冬令时规则,使用CET(UTC+1)。

输入的'2023-01-16 14:39:24.824000 +00:00'是UTC时间,转换到CET(UTC+1)自然得到2023-01-16 15:39:24.824000,这个结果是完全符合当时时区规则的正确输出,而非异常。

  1. 直接指定时区缩写的特殊性
    第二个查询中直接使用CEST,它是夏令时的固定时区偏移(UTC+2),不会随日期切换冬夏令时,所以转换后得到你预期的16:39,但这和Europe/Tirana的实际时区规则并不等价——时区名称(如Europe/Tirana)会自动根据日期切换冬夏令时,而时区缩写(如CEST)是固定偏移。

  2. tzdata版本的潜在影响
    如果你的PostgreSQL依赖的时区数据库(tzdata)版本过旧,可能无法识别阿尔巴尼亚2023年之后的永久时区变更规则,但你的查询日期在规则变更之前,所以这不是本次问题的直接原因。若后续查询2023年3月之后的日期仍出现异常,再考虑升级tzdata版本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:25:30