使用Python减去日期

Subtracting Dates With Python

我正在制作一个简单的程序来告诉个人他们活了多久。

我知道如何获得当前日期,并获得他们的生日。 唯一的问题是我无法减去这两个,我知道一种减去两个日期的方法,但不幸的是它不包括小时,分钟或秒。

我正在寻找一种方法,可以减去两个日期,并将差异返回到第二个,而不仅仅是一天。


1
2
3
4
5
6
from datetime import datetime

birthday = datetime(1988, 2, 19, 12, 0, 0)
diff = datetime.now() - birthday
print diff
# 8954 days, 7:03:45.765329


使用UTC时间,否则在DST过渡期间,以秒为单位的年龄可能会倒退:

1
2
3
4
5
from datetime import datetime

born = datetime(1981, 12, 2) # provide UTC time
age = datetime.utcnow() - born
print(age.total_seconds())

如果您的程序在与人出生地不同的地方(时区)运行,或者自生日以来时间规则在此处更改,则您也无法使用当地时间。 它可能会引入几个小时的错误。

如果你想考虑闰秒,那么任务变得几乎不可能。


当减去两个datettime对象时,您将获得一个datettime.timedelta对象。

1
2
3
4
from datettime import datetime
x = datetime.now()
y = datetime.now()
delta = y - x

它会给你微处理器分辨率的时间差。

有关更多信息,请查看官方文档


从您的日期创建datetime.datetime

1
datetime.datetime.combine(birthdate, datetime.time())

现在你可以从datetime.datetime.now()中减去它。

1
2
3
4
5
6
>>> from datetime import date, datetime, time
>>> bday = date(1973, 4, 1)
>>> datetime.now() - datetime.combine(bday, time())
datetime.timedelta(14392, 4021, 789383)
>>> print datetime.now() - datetime.combine(bday, time())
14392 days, 1:08:13.593813

1
2
3
4
5
6
import datetime
born = datetime.date(2002, 10, 31)
today = datetime.date.today()
age = today - born

print(age.total_seconds())

输出:463363200.0