如何在python的datetime模块中减去日期以获取年,月,日,格式的年龄

时间:2020-07-27 18:01:34

标签: python datetime

我希望该程序可以确定一个人的年龄。我希望它通过从当前日期减去一个人的生日来做到这一点。它可以正确设置月份和日期,但是年份并不完全正确。例如,当我输入此日期时,它将说该人是16岁。实际上,由于16岁生日还没到,他们应该15岁。我该如何解决?

from datetime import datetime


birth = datetime(2004, 12, 25)
current = datetime.utcnow() # July 27th, 2020 at the time of writing
year_answer = current.year - birth.year
month_answer = current.month - birth.month
day_answer = current.day - birth.day
if month_answer < 1:
    month_answer += 12
print(year_answer, month_answer, day_answer)

4 个答案:

答案 0 :(得分:1)

我有一种更好的方式来表示这种代码替代方式

from datetime import date 
def calculateAge(birthDate): 
       today = date.today()
       age = today.year - birthDate.year - ((today.month, today.day) <  (birthDate.month, birthDate.day)) 
       return age
print(calculateAge(date(1997, 1, 8)), "years") 

For more information you can visit this link

答案 1 :(得分:1)

您可以这样做。

from datetime import datetime
birth = datetime(2004, 12, 25)
current = datetime.utcnow() # July 27th, 2020 at the time of writing
year_answer = current - birth

#From here its just math
years = int(year_answer.days/365.25)
months = int((year_answer.days/30.4167)-(years*12))
days = int((year_answer.days)-(months*30.4167)-(years*12*30.4167))

print(years,'years', months,'months', days,'days','old')

答案 2 :(得分:1)

如果当前日期低于生日,则月份也会遇到相同的问题。在这些情况下,您只需要校正下一个更高的单位即可。您几乎可以使用if语句到达那里。现在,您只需要调整年份和月份即可。

from datetime import datetime

birth = datetime(2004, 12, 29)
current = datetime.utcnow() # July 27th, 2020 at the time of writing

day_answer = current.day - birth.day
month_answer = current.month - birth.month
year_answer = current.year - birth.year

if day_answer<0:
    month_answer-=1
    day_answer+=31

if month_answer < 0:
    year_answer -=1
    month_answer += 12
    
print(year_answer, month_answer, day_answer)

不过,有一个问题。如果当前月份有31天,则应在该天加上31。如果只有30天或28天,则应添加30天或28天。是否有一种简便的方法来从日期时间中获取正确的数字?

答案 3 :(得分:0)

当您在月份中加上12时,您应该从年份中减去1以进行补偿,因为1年是12个月。您也应该在当天做类似的事情。

if month_answer < 1:
    month_answer += 12
    year_answer -= 1
相关问题