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

Python中解析带时区的时间字符串为datetime对象报错求助

解决Python中datetime.strptime无法识别EDT时区的问题

这个报错的核心原因是:Python标准库的datetime.strptime()方法对%Z格式符的支持有限,尤其是像EDT这类夏令时时区缩写,在很多系统(比如Windows)中无法被正确识别,导致格式匹配失败。

下面给你几个可行的解决方案:

方案1:使用python-dateutil库(推荐)

python-dateutil的解析器可以自动识别绝大多数日期格式和时区缩写,不需要手动指定格式字符串,非常省心。

首先安装库:

pip install python-dateutil

然后修改代码:

from dateutil import parser

# 直接解析字符串,自动处理时区
datetime_object = parser.parse('Apr-23-2018_10:57:19_EDT')
print(datetime_object)

这个方法会返回带时区信息的datetime对象,完美解决你的问题。

方案2:手动处理时区(结合pytz)

如果不想依赖太多第三方库,可以先解析不带时区的部分,再用pytz关联正确的时区(它会自动处理夏令时/冬令时的切换,比手动写UTC偏移更准确):

首先安装pytz:

pip install pytz

然后编写代码:

from datetime import datetime
import pytz

# 提取字符串中不带时区的部分
dt_without_tz = '_'.join('Apr-23-2018_10:57:19_EDT'.split('_')[:2])
# 解析为无时区信息的datetime对象
naive_dt = datetime.strptime(dt_without_tz, '%b-%d-%Y_%H:%M:%S')
# 关联EDT对应的时区(America/New_York会自动识别夏令时)
edt_tz = pytz.timezone('America/New_York')
datetime_object = edt_tz.localize(naive_dt, is_dst=True)  # is_dst=True明确当前是夏令时

print(datetime_object)

方案3:替换时区缩写为UTC偏移(简易版)

如果你只需要处理EDT这类特定时区,可以把缩写替换成对应的UTC偏移,再用%z格式符解析:

from datetime import datetime

# 把EDT替换为UTC-4的偏移格式(符合%z要求的格式)
formatted_str = 'Apr-23-2018_10:57:19_EDT'.replace('EDT', '-0400')
# 用%z解析UTC偏移
datetime_object = datetime.strptime(formatted_str, '%b-%d-%Y_%H:%M:%S_%z')

print(datetime_object)

不过这个方法局限性大,需要手动维护时区缩写和偏移的对应关系,不推荐用于多时区场景。

内容的提问来源于stack exchange,提问作者Tanvir Hossain Bhuiyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:32:40