def get_age(birthday):
# 本函数根据输入的8位出生年月日数据返回截至当天的年龄
today = str(datetime.datetime.now().strftime('%Y-%m-%d')).split("-")
# 取出系统当天的年月日数据为列表[年,月,日]
n_monthandday=today[1] + today[2]
# 将月日连接在一起
n_year=today[0]
# 单独列出当年年份
r_monthandday=birthday[4:]
# 取出输入日期的月与日
r_year=birthday[:4]
# 取出输入日期的年份
if (int(n_monthandday)>=int(r_monthandday)):
# 如果月日比系统月日数据要小,刚直接用年份相减就是
r_age=int(n_year)-int(r_year)
else:
r_age=int(n_year)-int(r_year)-1
return r_age
# 返回实际年龄
3、手工输入出生日期,或者从身份证号码中截取出生日期,首先会检测是否符合日期规则。
if __name__ == '__main__':
while True:
# 手工输入8位出生年月日期,如果在程序中,可以通过身份证号截取出来。
# 要求输入的出生日期参数是8位符合日期规则的数字,并且不能迟于系统当天日期
# 否则,将退出提示重新输入数据
date_str=input("请输入出生年月日(格式:19880919):")
Y=int(date_str[:4])
M=int(date_str[4:6])
D=int(date_str[6:])
r_date=datetime.date(Y,M,D)
# 检查输入的日期是否迟于系统当天日期
if Y>datetime.datetime.now().year or (Y==datetime.datetime.now().year and M>=datetime.datetime.now().month and D>datetime.datetime.now().day):
print("您输入的日期在系统日期之后,请重新检查后再输入!")
else:
# 调用函数
ages=get_age(date_str)
print("经过计算,今年年龄是 %s 岁" % ages)
break
except:
print("输入的出生日期有错误,请重新按19880919的格式输入!")
4、测试结果
A、当输入19890919时(正常日期):
请输入出生年月日(格式:19880919):19890919
经过计算,今年年龄是 32 岁
B、当输入19890934时(不符合日期格式):
请输入出生年月日(格式:19880919):19890934
输入的出生日期有错误,请重新按19880919的格式输入!
请输入出生年月日(格式:19880919):
C、当输入20211225时(在系统日期之后):
请输入出生年月日(格式:19880919):20211225
您输入的日期在系统日期之后,请重新检查后再输入!
请输入出生年月日(格式:19880919):
以上代码,本人已在Python3.7中测试通过,如果对您有帮助,烦请加关注,并点赞收藏!
欢迎共同探讨、交流学习!