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
相关产品推荐
相关产品推荐

