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

带时区感知的datetime比较及莫斯科时区偏移异常问题

Python时区相关问题解答

原代码

import pytz
import datetime
from pytz import timezone

tz_moscow = timezone('Europe/Moscow')
tz_yerevan = timezone('Asia/Yerevan')

dt1 = tz_yerevan.localize(datetime.datetime(2011, 7, 20, 0, 0, 0, 0))
dt2 = tz_moscow.localize(datetime.datetime(2011, 6, 20, 0, 0, 0, 0))
print (dt2.utcoffset()) # Expected 3, actual result - 4
print (dt1)
print (dt2)
print (dt1 == dt2)

问题1:莫斯科时区偏移为何显示为UTC+4而非预期的UTC+3?

2011年俄罗斯仍实行夏令时制度,夏令时覆盖当年3月最后一个周日至10月最后一个周日。代码中dt2对应的日期是6月20日,处于夏令时生效区间内,此时莫斯科采用莫斯科夏令时(MSD),时区偏移为UTC+4;而非冬令时的莫斯科标准时间(MSK,UTC+3)。这就是实际输出偏移为4的核心原因。

问题2:能否直接使用dt1 < dt2这类运算符比较带时区感知的datetime对象?

可以直接使用。带时区感知的datetime对象在使用==、<、>等比较运算符时,Python会自动将它们转换为UTC时间进行对比,无需手动做时区转换。比如你代码中的dt1 == dt2会返回True,因为这两个时间转换为UTC后是同一时刻。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:45:48