You need to enable JavaScript to run this app. Python用datetime计算日/月/年格式输入日期与当前日期的天数差时代码始终返回0
优惠活动
大模型
产品
解决方案
定价
更多

Python用datetime计算日/月/年格式输入日期与当前日期的天数差时代码始终返回0

代码问题逐一拆解

导致你的函数始终返回0的三个明确错误点:

  • 入参类型不匹配直接触发异常:datetime.strptime()的作用是把格式化的日期字符串解析为datetime对象,第一个参数必须是字符串,但代码里给它传了date.today()返回的date类型对象,这一步会直接抛TypeError,被外层的无差别异常捕获抓住,直接走返回0的分支,这是函数恒返回0的核心原因。
  • 时间间隔的属性取错:两个时间对象相减得到的是timedelta类型的时间差,timedelta本身没有.day属性,用来表示总天数差的属性是.days(会带正负值);.day是datetime对象的属性,用来标识当前时间是当月的第几天,读这个属性会抛AttributeError,同样会被无差别捕获触发返回0。
  • 异常捕获范围过宽:代码里写的裸except:会把所有类型的异常都吞掉,不管是代码逻辑写错的类型错误、属性错误,还是真正的“输入日期格式不对”的解析错误,都会被统一处理成返回0,你根本看不到运行时抛出的真实报错,自然没法定位问题。
快速定位问题的方法

调试的时候先把外层的try-except结构整个删掉,直接运行函数传测试值(比如convert_date('3/3/21')),就能直接在控制台看到真实的报错信息,不用反复猜测错误位置。
另外不需要绕弯路把当前日期转成字符串再反向解析成datetime:date.today()本身就是本地时区的当日date对象,和解析后的输入日期直接算差值就可以,完全不需要多此一举做格式转换。

修正后的可运行代码
from datetime import datetime, date

def convert_date(input_date):
    try:
        current_date = date.today()
        # 解析输入的日期字符串,取date部分和当前日期类型统一
        input_parsed = datetime.strptime(input_date, '%d/%m/%y').date()
        # 直接计算两个date对象的差值,days属性返回带正负的天数差
        delta = input_parsed - current_date
        return delta.days
    # 只捕获日期格式解析的异常,其他逻辑报错正常抛出方便调试
    except ValueError:
        return 0

验证逻辑:假设当前实际日期为2021-03-14,输入日期为'3/3/21',计算得到的差值为(2021-03-03) - (2021-03-14) = -11,和你预期的返回值完全匹配;如果输入格式不符合日/月/年的要求,会触发ValueError返回0,符合格式错误的处理规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 13:54:02