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

dateutil.parser解析YYYY:MM:DD格式日期返回异常结果求助

问题原因

dateutil.parser依赖启发式规则解析日期,它默认将横杠(-)、斜杠(/)、点(.)视为日期分隔符,但不认可冒号(:)作为年、月、日的分隔符。当遇到2009:05:03这类格式时,解析器无法识别出合法的年、月、日字段,会自动用当前系统日期的年、月、日填充,仅保留能识别的时间部分08:12:37,最终导致解析结果异常。

解决办法

方法1:替换日期部分的冒号

将日期段的冒号替换为dateutil可识别的分隔符(如横杠),再执行解析:

from dateutil.parser import parse

date_string = '2009:05:03 08:12:37'
fixed_date_str = date_string.replace(':', '-', 2)  # 仅替换前两个冒号,避免影响时间部分
result = parse(fixed_date_str)
print(result)  # 输出:2009-05-03 08:12:37

方法2:使用datetime.strptime指定格式(推荐)

EXIF元数据的日期格式固定为YYYY:MM:DD HH:MM:SS,直接用strptime按指定格式解析是最可靠的方式,能规避启发式解析的不确定性:

import datetime as dt

date_string = '2009:05:03 08:12:37'
result = dt.datetime.strptime(date_string, "%Y:%m:%d %H:%M:%S")
print(result)  # 输出:2009-05-03 08:12:37

方法3:自定义ParserInfo适配冒号分隔符

通过自定义dateutil.parser.ParserInfo类,将冒号加入日期分隔符列表,让解析器识别该格式:

from dateutil.parser import parse, ParserInfo

class ColonDateParser(ParserInfo):
    DATE_SEPARATORS = [':', '-', '/', '.']  # 添加冒号作为日期分隔符

date_string = '2009:05:03 08:12:37'
result = parse(date_string, parserinfo=ColonDateParser())
print(result)  # 输出:2009-05-03 08:12:37

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:18:16