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

使用Python从格式不固定的日期中提取年份的技术问题

解决日期格式不固定时提取年份的问题

哈哈,这个坑我踩过!用max(d.split('-'))这种方法确实太容易出问题了——字符串比较逻辑和数字完全不一样,像"22"这种字符串会被判定为比"2017"大,而且还没法兼容/这类其他分隔符。给你两个稳一点的解决方案:

方法1:用Python标准库datetime(无需额外安装)

我们可以预先列出所有可能的日期格式,然后逐个尝试解析,成功后提取年份:

from datetime import datetime

def get_year_from_date(date_str):
    # 覆盖所有可能遇到的格式,后续可以根据新增格式补充
    possible_formats = ['%Y', '%Y-%m', '%Y-%m-%d', '%Y/%m', '%Y/%m/%d']
    
    for fmt in possible_formats:
        try:
            parsed_date = datetime.strptime(date_str, fmt)
            return parsed_date.year
        except ValueError:
            # 当前格式不匹配,继续尝试下一个
            continue
    
    # 如果所有格式都无法解析,抛出异常或返回默认值(根据你的需求调整)
    raise ValueError(f"无法识别的日期格式:{date_str}")

这个方法的优势是不需要额外安装依赖,而且逻辑可控,你可以随时添加新的日期格式到列表里。

方法2:用第三方库python-dateutil(更省心)

如果你的项目允许安装第三方库,dateutil.parser能自动识别绝大多数常见的日期格式,不用手动维护格式列表:

from dateutil.parser import parse

def get_year_from_date(date_str):
    # 自动解析日期字符串,直接提取年份
    return parse(date_str).year

这个方法灵活性拉满,就算服务器后续返回带时间的日期(比如2019/10/20 14:30)或者其他变种格式,它基本都能正确识别。

为什么之前的方法不行?

你之前用max(d.split('-'))的问题在于:

  • 字符串比较是按字符逐个对比的,"22"和"2017"比的时候,第二个字符'2' > '0',所以会误判"22"更大
  • 只能处理-分隔的格式,遇到/或者其他分隔符直接失效

只有把字符串转换成真正的日期对象,再提取年份,才能从根本上避免这些问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:22:40