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

不同格式卡号日期字符串解析年份错误 计算日期间隔年数问题

问题根因

输出错误核心有两个原因:

  1. dateutil.parser.parse解析无明确年份的日期时,默认会使用当前系统年份填充缺失的年份字段,你测试时的系统年份为2021,因此所有输出的年份都被替换为21。
  2. 你的日期字符串存在两种字段顺序:年份-月份缩写、月份缩写-年份,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:15:04