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

Python中基于DOB计算AGE触发TypeError,求解决方案

问题分析

报错TypeError: an integer is required (got type datetime.datetime)的核心原因:

  • 你用date(v1)尝试转换datetime对象,但date()构造函数需要传入年、月、日三个整数参数,而非直接传入datetime实例。
  • 代码里v1 = 2001-11-24 00:00:00的写法是非法的,实际你获取到的v1是datetime.datetime类型的对象,不需要手动写这个赋值语句。
解决方案

根据你的场景,提供两种修正方式:

方式一:直接使用datetime对象计算

如果v1已经是datetime.datetime类型,直接传入函数即可,函数可兼容datetime和date对象的属性调用:

from datetime import date, datetime

# 假设v1是已获取到的datetime对象,示例赋值如下
v1 = datetime(2001, 11, 24, 0, 0, 0)

def age(birthdate):
    today = date.today()
    age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day))
    return age

print(age(v1), "years")

方式二:将datetime对象转为date对象

如果需要将datetime对象转为date类型,使用datetime对象自带的.date()方法,而非date()构造函数:

from datetime import date, datetime

v1 = datetime(2001, 11, 24, 0, 0, 0)

def age(birthdate):
    today = date.today()
    age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day))
    return age

# 调用datetime对象的date()方法完成转换
print(age(v1.date()), "years")

额外情况处理

如果你的v1是字符串形式的"2001-11-24 00:00:00",需要先解析为datetime对象:

from datetime import date, datetime

v1_str = "2001-11-24 00:00:00"
# 按字符串格式解析为datetime对象
v1 = datetime.strptime(v1_str, "%Y-%m-%d %H:%M:%S")

def age(birthdate):
    today = date.today()
    age = today.year - birthdate.year - ((today.month, today.day) < (birthdate.month, birthdate.day))
    return age

print(age(v1), "years")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:23:23