使用 Python 减去日期时间对象

问题描述 投票:0回答:7

我正在开发一个简单的程序来告诉一个人他们已经活了多久。

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

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

python date time
7个回答
61
投票
from datetime import datetime

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

17
投票

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

from datetime import datetime

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

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

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


10
投票

当两个

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

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

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

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


6
投票

根据您的约会创建

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

5
投票

由于 DateTime.DateTime 是一种不可变类型方法,因此总是会产生一个新对象,因此两个 DateTime 对象的差异会产生一个 DateTime.timedelta 类型:

from datetime import date,datetime,time,timedelta
dt=datetime.now()
print(dt)
dt2=datetime(1997,7,7,22,30)
print(dt2)
delta=dt-dt2
print(delta)

print(int(delta.days)//365)
print(abs(12-(dt2.month-dt.month)))
print(abs(dt.day))

输出 timedelta(8747,23:48:42.94) 或测试代码时的天数表明时间增量编码了 8747 天和 23 小时 48 分钟的偏移量...

输出

   2021-06-19 22:27:36.383761
    1997-07-07 22:30:00
    8747 days, 23:57:36.383761
    23  Year
    11  Month
    19  Day

4
投票
import datetime
born = datetime.date(2002, 10, 31)
today = datetime.date.today()
age = today - born

print(age.total_seconds())

输出:463363200.0


0
投票
from datetime import datetime

birthday = datetime(2024, 11, 12, 6, 1, 0) # Should be in UTC
cur_date = datetime.now(datetime.UTC) # Time in UTC
elapsed_time = cur_date - birthday
print(elapsed_time)

我知道已经晚了,但是:

  • 代码基本上是其他答案编译在一起以使其成为更好的答案。
  • 此代码适用于 。由于
    print
    声明,当前接受的答案仅适用于 Python 2。

有用的文档:

© www.soinside.com 2019 - 2024. All rights reserved.