首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中以年和天为单位的日期差异(无月份)

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

Stack Overflow用户
提问于 2018-06-30 14:39:16
回答 2查看 72关注 0票数 1

我有两个日期: 2005/04/10和2018/02/11。

下面的代码计算年、月和天的差值:

代码语言:javascript
复制
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)

输出为:

代码语言:javascript
复制
12
10
1

12年零10个月零1天。问题是我对几个月不感兴趣,我只想要几年几天的时间。在我的示例中,它应该是12年零306天。我知道一个很好的近似值是10 months*30=300天,但结果是301天,而不是306天。我想要精确地计算日期,考虑到闰月和每个月的天数之差。Python中有没有内置的方法可以做到这一点呢?

听着,我已经在StackOverflow上做了研究,想找到一个答案,但所有与我的问题相关的都不能回答我的问题。

EN

回答 2

Stack Overflow用户

发布于 2018-06-30 14:54:16

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

代码语言:javascript
复制
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,以避免重复计算该部分的差值。

票数 4
EN

Stack Overflow用户

发布于 2018-07-01 01:44:50

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

代码语言:javascript
复制
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天的剩余时间。有没有人能推荐一段不那么冗长的代码呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51112430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档