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

How can I subtract two dates in Python?

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

1
2
3
4
5
6
7
8
9
10
11
12
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天?


在Python中减去两个日期的结果是一个timedelta对象,它只代表一个持续时间。它在启动时不会"记住",因此无法告诉您已经过了多少个月。

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

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


您可以使用strptime

1
2
3
4
5
6
7
>>> 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