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

Python爬虫使用strptime解析EDT时区日期字符串报错

问题解决方法

报错根因

Python标准库datetime.strptime的%z占位符仅支持解析±HHMM格式的数值型UTC偏移(比如+0800对应东八区),无法识别EDT、CST这类字母形式的时区缩写,因此格式匹配失败。
另外你原格式串里的%H是24小时制占位符,但目标时间是带AM/PM标识的12小时制格式,就算时区问题解决,这里也会把下午时间解析成凌晨时间,导致排序错误。


可选解决路径

路径1:移除时区直接解析(适合仅需按文章发布先后排序、不需要时区换算的场景)

原始时间字符串最后固定为「空格+3位时区缩写」共4个字符,直接截断后用修正后的格式串解析即可:

raw_date_str = soup.find('time').text.strip()
# 截断末尾4位的时区部分,用12小时制占位符%I解析
date = datetime.datetime.strptime(raw_date_str[:-4], "%b %d, %Y %I:%M%p")

路径2:完整解析带时区的时间(需要保留时区信息、统一时间基准的场景)

标准库没有内置缩写时区解析能力,可以用python-dateutil库的解析器自动识别时间格式,不需要手动写匹配串:

  1. 先安装依赖:
    pip install python-dateutil
  2. 修改日期解析代码:
from dateutil import parser
# 自动识别原始时间字符串,解析结果自带时区信息
date = parser.parse(soup.find('time').text.strip())

如果需要把所有文章时间统一转换为固定时区(比如北京时间)方便排序,可以搭配时区库做转换:

import pytz
# 解析后统一转为东八区时间
date = parser.parse(soup.find('time').text.strip()).astimezone(pytz.timezone('Asia/Shanghai'))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:48:31