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

Python中使用datetime.strptime转换特定日期字符串为年龄时触发ValueError的问题

解决日期转年龄的格式匹配问题

你遇到的这个报错核心原因很明确:你的日期格式字符串和输入的日期格式不匹配。

看你的代码里用的是datetime.strptime(users_dob, "%d/%m/%y"),这个格式字符串定义的是「斜杠分隔、两位年份」的日期(比如17/04/69),但你传入的日期是17-04-1969——用横杠分隔,而且年份是四位的,自然会触发ValueError,因为解析器找不到对应的格式匹配。

直接修复方案

把格式字符串改成"%d-%m-%Y"(%Y对应四位年份,-对应分隔符),修改后的代码如下:

from datetime import *
def age(users_dob):
    # 调整格式字符串匹配横杠分隔+四位年份的输入
    users_dob = datetime.strptime(users_dob, "%d-%m-%Y").date()
    today = date.today()
    return today.year - users_dob.year - ((today.month,today.day) < (users_dob.month,users_dob.day))

# 现在调用即可正常计算年龄
print(age('17-04-1969'))

额外提示

如果你的场景中可能同时存在多种分隔符的日期(比如既有/又有-),可以先统一处理分隔符再解析,比如:

# 先把横杠替换成斜杠,再用对应格式解析
users_dob_normalized = users_dob.replace('-', '/')
users_dob = datetime.strptime(users_dob_normalized, "%d/%m/%Y").date()

关键要记住:strptime的格式字符串必须和输入日期的每一个字符细节完全对应,包括分隔符、数字位数,这是这类解析错误最常见的诱因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:57:34