我有两个日期表示为datetime
对象,并试图以年为单位计算这两个日期之间的时间(相当于Excel yearfrac
函数)。在
使用relativedelta
我可以得到日期之间的年数、月数和天数,但不能得到年份的分数,我也可以减去日期得到天数,但除以365.25似乎不能得到我所期望的答案。在
start_date = dt.datetime(2010, 12, 31)
end_date = dt.datetime(2019, 5, 16);
delta = relativedelta(end_date, start_date);
print(delta)
这是我得到的输出:
relativedelta(years=+8, months=+4, days=+16)
我要找的是:8.38
如果我使用以下代码:
^{pr2}$我得到的输出是: 8天,8:56:10.841889
需要记住的一点是,
datetime.datetime
对象定义了减法运算符,返回了一个datetime.timedelta
对象。并且datetime.timedelta
对象定义了除法运算符,因此您可以获得timedelta
与公年(365天)或所有公年和闰年(365天、5小时、49分钟和12秒)的平均长度之间的比率。在我刚做了8+((月*30)+天)/365=8.3726的数学。假设每个月30天,一年365天。不太精确,但可以放在一条线上。当你除以365.25这个数字,你得到了什么?它必须有多精确?在
如果您需要绝对精度,我只需要:
编辑 这是一个简化的解决方案,假设一年中有365.25天(您可以使用365.2425天精确到400年的例外情况)来计算闰年。如果您需要它与excel的输出完全匹配,那么最好是为excel编写vba宏
相关问题 更多 >
编程相关推荐