Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的日期差异,以年和日为单位(无月)_Python - Fatal编程技术网

Python中的日期差异,以年和日为单位(无月)

Python中的日期差异,以年和日为单位(无月),python,Python,我有两个日期: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(diff

我有两个日期: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。我想精确计算闰月的天数,以及每个月天数的差异。Python中是否有内置的方法来实现这一点


听着,我已经对StackOverflow进行了研究,以找到答案,但所有与我的问题相关的答案都不能回答我的问题。

在您已经编写的代码之后,请执行以下操作:

mid_date = datetime(start_date.year + difference.years, start_date.month, start_date.day)
print((end_date - mid_date).days)
这为您的示例输入提供了307


我们的想法是用
差异来抵消原始的
开始日期
。年份
,以避免重复计算该部分差异。

在编写代码后,执行以下操作:

mid_date = datetime(start_date.year + difference.years, start_date.month, start_date.day)
print((end_date - mid_date).days)
这为您的示例输入提供了307


我们的想法是通过
差异来抵消原始的
开始日期
。年
,以避免重复计算差异的那部分。

感谢John的评论,我编写了这段代码,我认为它满足了我的要求:

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天。
有人能推荐一段不那么冗长的代码吗?

多亏了John的评论,我写了这段代码,我认为它满足了我的要求:

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天。
有人能推荐一段不那么冗长的代码吗?

这是个好主意,但不是100%完美。我认为闰年可能会像你的情况那样改变一天或几天的结果。@SalvatoreD'angelo:我认为你对这个案例的答案306与我的答案307之间的分歧是语义上的。也就是说,您还没有明确定义这方面的规则。这是一个好主意,但并非100%完美。我认为闰年可能会像你的情况那样改变一天或几天的结果。@SalvatoreD'angelo:我认为你对这个案例的答案306与我的答案307之间的分歧是语义上的。也就是说,您还没有明确定义这方面的规则。