我有两个约会:2005/04/10和2018/02/11。
以下代码按年,月和日计算差异:
from datetime import datetime
from dateutil.relativedelta import relativedelta
start_date = datetime(2005,4,10)
end_date = datetime(2018,2,11)
difference = relativedelta(end_date, start_date)
print(difference.years)
print(difference.months)
print(difference.days)
输出为:
12
10
1
12年10个月零1天。问题是我对几个月不感兴趣,只希望在几天和几天之内。在我的示例中,应该是12年零306天。我知道一个很好的近似值是10个月* 30 = 300天,但结果是301,而不是306。我要精确计算出考虑leap日和每个月的天数差异的天数。 Python中有内置方法可以做到这一点吗?
看起来我已经对StackOverflow进行了研究,以找到答案,但是与我的问题相关的所有问题都无法解决我的问题。
答案 0 :(得分:3)
在编写完代码之后,执行以下操作:
mid_date = datetime(start_date.year + difference.years, start_date.month, start_date.day)
print((end_date - mid_date).days)
您的示例输入为307。
该想法是将原始start_date
偏移difference.years
,以避免重复计算差异的那一部分。
答案 1 :(得分:0)
由于约翰的评论,我编写了这段代码,我认为它满足了我的要求:
from datetime import datetime
from dateutil.relativedelta import relativedelta
start_date = datetime(2005,4,10)
end_date = datetime(2018,2,11)
difference = relativedelta(end_date, start_date)
remaining_days = 0
if start_date != datetime(start_date.year, 1, 1):
end_first_year = datetime(start_date.year, 12, 31)
remaining_days += (end_first_year - start_date).days
if end_date != datetime(start_date.year, 1, 1):
begin_last_year = datetime(end_date.year, 1, 1)
remaining_days += (end_date - begin_last_year).days
print(difference.years)
print(remaining_days)
这将精确地剩余306天。 谁能建议一个不太冗长的代码段?