不同格式卡号日期字符串解析年份错误 计算日期间隔年数问题
问题根因
输出错误核心有两个原因:
dateutil.parser.parse解析无明确年份的日期时,默认会使用当前系统年份填充缺失的年份字段,你测试时的系统年份为2021,因此所有输出的年份都被替换为21。- 你的日期字符串存在两种字段顺序:
年份-月份缩写、月份缩写-年份,dateutil.parser无法自动识别两种格式的规则,因此解析逻辑全部错误。
解决方法
你可以先拆分每个日期字符串,区分出年份(两位数字)和月份(三位英文缩写),再做格式转换即可,完全不需要依赖自动日期解析工具,避免识别误差。
示例代码如下:
start_date = ['18-Aug', '12-Aug', 'Nov-19', 'Oct-17', '19-Apr', 'Mar-15', '12-Jul', 'Jul-15', '13-May', '13-Oct'] # 提前定义月份缩写映射,避免依赖系统locale设置导致解析失败 month_mapping = { 'Jan': '01', 'Feb': '02', 'Mar': '03', 'Apr': '04', 'May': '05', 'Jun': '06', 'Jul': '07', 'Aug': '08', 'Sep': '09', 'Oct': '10', 'Nov': '11', 'Dec': '12' } for date_str in start_date: part_a, part_b = date_str.split('-') # 区分月份和年份 if part_a in month_mapping: month = month_mapping[part_a] year = part_b else: month = month_mapping[part_b] year = part_a # 输出目标格式 print(f"{year}-{month}")
运行后输出结果和预期完全一致:
18-08 12-08 19-11 17-10 19-04 15-03 12-07 15-07 13-05 13-10
后续计算间隔年数的补充提示
如果需要计算日期间隔,你可以根据业务场景把两位年份补全为四位年份(比如默认补20xx或者19xx),再转换为datetime对象计算时间差即可。
内容的提问来源于stack exchange,提问作者Moresky
相关产品推荐
相关产品推荐

