如何在Python中减去两个日期?

时间:2014-11-07 22:34:53

标签: python

所以基本上我想要做的是从今天的日期减去出生日期以获得一个人的年龄,我已经成功地完成了这个,但我只能用它来显示这些人的年龄。< / p>

dateofbirth = 19981128
dateofbirth = list(str(dateofbirth))
now = datetime.date.today()
yr = dateofbirth[:4]
yr = ''.join(map(str, yr))
month = dateofbirth[4:6]
month = ''.join(map(str, month))
day = dateofbirth[6:8]
day = ''.join(map(str, day))
birth = datetime.date(int(yr), int(month), int(day))
age = now - birth
print(age)

在这种情况下,年龄是以天为单位,有没有办法将其作为xx年xx个月和xx天?

2 个答案:

答案 0 :(得分:1)

您可以使用strptime

>>> import datetime
>>> datetime.datetime.strptime('19981128', '%Y%m%d')
datetime.datetime(1998, 11, 28, 0, 0)
>>> datetime.datetime.now() - datetime.datetime.strptime('19981128', '%Y%m%d')
datetime.timedelta(5823, 81486, 986088)
>>> print (datetime.datetime.now() - datetime.datetime.strptime('19981128', '%Y%m%d'))
5823 days, 22:38:18.039365

答案 1 :(得分:1)

在Python中减去两个日期的结果是一个timedelta对象,它只代表一个持续时间。它没有记住&#34;什么时候开始,所以它不能告诉你已经过了几个月。

考虑从1月1日到3月1日的时间是&#34; 2个月&#34;,3月1日到4月28日的时间是&#34; 1个月和28天&#34;,但是在非闰年他们的持续时间相同,为59天。实际上,夏令时,但不要让它变得比它需要的更复杂; - )

可能有第三方库可以帮助您,但就标准Python库而言,AFAIK您必须自己动手并通过查找日/月的差异来自行完成这两个日期的/年组成部分依次。当然,月和日的差异可能是负数,因此您必须处理这些情况。回想一下你是如何被教导在学校进行减法的,并且在从月份列到日期栏中携带数字时要非常小心,以便在相关月份使用正确的天数。