带时区感知的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
相关产品推荐
相关产品推荐

