前言
根據輸入的出生日期或從身份證號碼中截取出生日期后,計算出當前年齡,要求精確到截止系統當前日期的年齡。
實現步驟:
1、導入datetime 庫
import datetime
2、建立計算年齡的函數,輸入參數為符合日期規則的8位出生日期數字
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):")
try:
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中測試通過,如果對您有幫助,煩請加關注,並點贊收藏!
歡迎共同探討、交流學習!