我有两个日期: 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 months*30=300天,但结果是301天,而不是306天。我想要精确地计算日期,考虑到闰月和每个月的天数之差。Python中有没有内置的方法可以做到这一点呢?
听着,我已经在StackOverflow上做了研究,想找到一个答案,但所有与我的问题相关的都不能回答我的问题。
发布于 2018-06-30 14:54:16
在您已经编写的代码之后,执行以下操作:
mid_date = datetime(start_date.year + difference.years, start_date.month, start_date.day)
print((end_date - mid_date).days)
这就给出了307作为示例输入。
这个想法是用difference.years
来抵消原始的start_date
,以避免重复计算该部分的差值。
发布于 2018-07-01 01:44:50
感谢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天的剩余时间。有没有人能推荐一段不那么冗长的代码呢?
https://stackoverflow.com/questions/51112430
复制相似问题