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

如何精简比较两个MM/DD/YYYY格式日期的冗长if/elif嵌套函数?

优化方案

方案1:使用datetime标准库(最推荐)

不用自己手动实现日期比较逻辑,标准库已经处理了所有边界情况,可读性和可靠性最高:

from datetime import datetime

def get_oldest(date1, date2):
    """给定两个格式为"MM/DD/YYYY"的日期字符串,返回更早的那个日期"""
    date_pattern = "%m/%d/%Y"
    if datetime.strptime(date1, date_pattern) < datetime.strptime(date2, date_pattern):
        return date1
    return date2

如果追求更简洁的写法,还可以搭配min函数直接指定比较规则:

from datetime import datetime

def get_oldest(date1, date2):
    """给定两个格式为"MM/DD/YYYY"的日期字符串,返回更早的那个日期"""
    return min(date1, date2, key=lambda x: datetime.strptime(x, "%m/%d/%Y"))

方案2:无依赖的元组比较法

如果不想引入额外模块,可以把拆分后的日期调整为「年、月、日」顺序的元组,Python的元组默认会逐位比较大小,完全可以替代多层嵌套的if判断:

def get_oldest(date1, date2):
    """给定两个格式为"MM/DD/YYYY"的日期字符串,返回更早的那个日期"""
    def parse_date(date_str):
        month, day, year = date_str.split("/")
        return (year, month, day)
    return date1 if parse_date(date1) < parse_date(date2) else date2

变量命名建议
  • 避免无意义的后缀:date_one、date_two这类命名不如直接叫parsed_date1、parsed_date2更清晰,拆分日期时直接解包为month, day, year变量,不要靠索引访问,避免搞混字段顺序
  • 固定常量大写:如果日期格式是固定值,可以提为模块级常量,比如DATE_PATTERN = "%m/%d/%Y",后续修改时不用全局找硬编码的格式串
  • 函数名表意精准:get_oldest可以调整为get_earlier_date,避免其他人误以为是返回年龄最大的对象之类的歧义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:24:03