datetime.fromisoformat时区异常:纽约伦敦时差验证问题排查
问题根源与解决方法
问题原因
你遇到的核心问题是直接将pytz时区对象传入datetime构造函数无法正确识别夏令时偏移:
- 2022年11月4日纽约仍处于夏令时(EDT),与UTC的偏移为-4小时;
- 但通过
datetime.datetime(2022, 11, 4, 12, 19, 31, 0, tz)构造的datetime_obj,实际采用了纽约的标准时间(EST,UTC-5); - 对比两者的UTC时间:
test_obj对应UTC时间16:19,datetime_obj对应UTC时间17:19,因此test_obj < datetime_obj输出True。
解决方法
使用pytz时区对象的localize()方法生成带正确时区偏移的datetime对象,该方法会根据日期自动匹配夏令时/标准时间:
import pytz import datetime str_time = '2022-11-04 12:19:31.507025-04:00' test_obj = datetime.datetime.fromisoformat(str_time) tz = pytz.timezone('America/New_York') # 本地化时间,is_dst=None会强制校验时段有效性,避免模糊时间错误 datetime_obj = tz.localize(datetime.datetime(2022, 11, 4, 12, 19, 31, 0), is_dst=None) print(test_obj < datetime_obj) # 输出False,符合预期
补充说明
is_dst=None参数是可选但推荐的:当日期处于夏令时切换的模糊时段(如调回时间时的重复时段),该参数会抛出错误,避免生成不符合实际的时间对象。
内容的提问来源于stack exchange,提问作者user1700890
相关产品推荐
相关产品推荐

