要做个防沉迷验证,需要精确判断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 日之间的年龄。
需要注意的是,上述方法计算的是当前时刻与出生日期之间的准确年龄,如果需要考虑闰年和月份天数等因素,可以使用其他更复杂的方法进行计算。

德玛西亚