使用Python减去日期

Boe*_*les 18 python time date

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

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

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

Dav*_*son 22

from datetime import datetime

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

  • 不要使用本地时间(`datetime.now()`).[`使用datetime.utcnow()`](http://stackoverflow.com/a/12126443/4279). (5认同)

jfs*_*jfs 10

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

from datetime import datetime

born = datetime(1981, 12, 2) # provide UTC time
age = datetime.utcnow() - born
print(age.total_seconds())
Run Code Online (Sandbox Code Playgroud)

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

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


Mar*_*ers 5

datetime.datetime从您的日期创建一个:

datetime.datetime.combine(birthdate, datetime.time())
Run Code Online (Sandbox Code Playgroud)

现在您可以从 中减去它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
Run Code Online (Sandbox Code Playgroud)


San*_*dri 5

当两个datetime对象相减时,您将得到一个新datetime.timedelta对象。

from datetime import datetime
x = datetime.now()
y = datetime.now()
delta = y - x
Run Code Online (Sandbox Code Playgroud)

它将为您提供微码分辨率的时差。

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