Python中根据出生日期计算当前年龄 - 沧海金龙

python

Python中根据出生日期计算当前年龄

前言

根据输入的出生日期或从身份证号码中截取出生日期后,计算出当前年龄,要求精确到截止系统当前日期的年龄。

实现步骤:

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中测试通过,如果对您有帮助,烦请加关注,并点赞收藏!

 欢迎共同探讨、交流学习!

以上是 Python中根据出生日期计算当前年龄 - 沧海金龙 的全部内容, 来源链接: utcz.com/z/387450.html

回到顶部