繁体   English   中英

如何在python的日期时间模块中减去日期以获得年、月、日、格式的年龄

[英]how to subtract dates in python's datetime module to get age in a year, month, day, format

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

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)

我有更好的方法来表示这个代码替代

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") 

有关更多信息,您可以访问此链接

你可以做这样的事情。

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')

如果当前日期低于生日,则月份也会出现同样的问题。 在这些情况下,您只需要更正下一个更高的单位。 你几乎用 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。有没有简单的方法可以从 datetime 中获取正确的数字?

当您在月份中添加 12 时,您应该从年份中减去 1 来补偿,因为 1 年是 12 个月。 你也应该为这一天做类似的事情。

if month_answer < 1:
    month_answer += 12
    year_answer -= 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM