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
相关产品推荐
相关产品推荐

