要做个防沉迷验证,需要精确判断0-8,8-16,16-18和18+的用户,单纯使用年份相减显得不太严谨
解决方案
1 2 3 4 5 6 7 8 9 |
def get_user_age(idcard): birth_date = datetime.datetime(year=int(idcard[6:14][:4]), month=int(idcard[6:14][4:6]), day=int(idcard[6:14][6:8])) now_time = datetime.datetime.now() age = now_time.year - birth_date.year if now_time.year > birth_date.year and (birth_date.month > now_time.month or (birth_date.month == now_time.month and birth_date.day > now_time.day)): # 如果今年未到生日那天,那么应该减去一岁,不然就算12月份的生日,到了1月也会算成一岁 # now_time.year > birth_date.year 是为了规避现在是2022年,然后出生年份也是2022年的话,最后age会变成-1的问题 age -= 1 return age |
USE
1 2 |
print(get_user_age('000000199505060000')) # 返回27 |
GPT
要通过年月日获取准确的年龄,可以使用 Python 中的 datetime 模块和 dateutil 模块。具体来说,您需要执行以下步骤:
导入 datetime 和 dateutil 模块:
1 2 3 |
python import datetime from dateutil.relativedelta import relativedelta |
定义出生日期,并将其转换为 datetime 对象:
1 2 |
python birthday = datetime.datetime(year=1990, month=4, day=15) |
计算当前日期与出生日期之间的时间差,并使用 relativedelta 函数获取相对时间:
1 2 3 |
python today = datetime.datetime.today() age = relativedelta(today, birthday) |
获取 age 对象中的年龄信息:
1 2 |
python print("年龄:{} 岁 {} 个月 {} 天".format(age.years, age.months, age.days)) |
在这个例子中,将会输出当前时刻与 1990 年 4 月 15 日之间的年龄。
需要注意的是,上述方法计算的是当前时刻与出生日期之间的准确年龄,如果需要考虑闰年和月份天数等因素,可以使用其他更复杂的方法进行计算。
德玛西亚