2012-08-25 88 views
14

我正在研究一个简单的程序来告诉个人他们活着的时间。用Python减去日期

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

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

+0

相关:如果找到24个小时有日期时间之间传递 - 的Python(https://stackoverflow.com/q/26313520/4279) – jfs

回答

18
from datetime import datetime 

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

不使用本地时间( 'datetime.now()')。 ['使用datetime.utcnow()'](http://stackoverflow.com/a/12126443/4279)。 – jfs

4

从你的约会创建datetime.datetime

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

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

>>> 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 
3

当从其减去2个datettime对象,你会得到一个datettime.timedelta对象。

from datettime import datetime 
x = datetime.now() 
y = datetime.now() 
delta = y - x 

它会给你与microsencods的分辨率的时差。

欲了解更多信息,看看在official documentation

+0

这不会计算总的差值(以秒为单位的秒数) –

5

使用UTC时间,否则年龄秒就可以DST过渡期间倒退:

from datetime import datetime 

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

你也不能,如果你的程序运行使用本地时间在与某个人出生地不同的地方(时区)的计算机上,或者自生日以来时间规则在这个地方发生了变化。它可能会引入几个小时的错误。

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

1
import datetime 
born = datetime.date(2002, 10, 31) 
today = datetime.date.today() 
age = today - born 

print(age.total_seconds()) 

输出:463363200.0