【发布时间】:2012-08-21 00:23:50
【问题描述】:
我正在开发一个简单的程序来告诉人们他们活了多久。
我知道如何获取当前日期,并知道他们的生日。唯一的问题是我没有办法减去两个日期,我知道减去两个日期的方法,但不幸的是它不包括小时、分钟或秒。
我正在寻找一种可以减去两个日期并将差值返回到第二个日期的方法,而不仅仅是日期。
【问题讨论】:
我正在开发一个简单的程序来告诉人们他们活了多久。
我知道如何获取当前日期,并知道他们的生日。唯一的问题是我没有办法减去两个日期,我知道减去两个日期的方法,但不幸的是它不包括小时、分钟或秒。
我正在寻找一种可以减去两个日期并将差值返回到第二个日期的方法,而不仅仅是日期。
【问题讨论】:
从您的日期创建一个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
【讨论】:
from datetime import datetime
birthday = datetime(1988, 2, 19, 12, 0, 0)
diff = datetime.now() - birthday
print diff
# 8954 days, 7:03:45.765329
【讨论】:
datetime.now())。 Use datetime.utcnow().
当减去两个datetime 对象时,您将得到一个新的datetime.timedelta 对象。
from datetime import datetime
x = datetime.now()
y = datetime.now()
delta = y - x
它将为您提供微秒分辨率的时差。
有关更多信息,请查看official documentation。
【讨论】:
使用 UTC 时间,否则在 DST 转换期间以秒为单位的时间会倒退:
from datetime import datetime
born = datetime(1981, 12, 2) # provide UTC time
age = datetime.utcnow() - born
print(age.total_seconds())
如果您的程序在与一个人的出生地不同的地方(时区)运行的计算机上运行,或者如果该地方的时间规则自生日以来发生了变化,那么您也不能使用本地时间。它可能会引入几个小时的错误。
如果你想考虑闰秒,那么这项任务几乎是不可能的。
【讨论】:
import datetime
born = datetime.date(2002, 10, 31)
today = datetime.date.today()
age = today - born
print(age.total_seconds())
输出:463363200.0
【讨论】:
由于 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
【讨论】: