如何从Python中的datetime对象计算年份分数?

2024-09-29 21:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个日期表示为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


Tags: 对象函数datetimedate时间dt单位excel
2条回答

需要记住的一点是,datetime.datetime对象定义了减法运算符,返回了一个datetime.timedelta对象。并且datetime.timedelta对象定义了除法运算符,因此您可以获得timedelta与公年(365天)或所有公年和闰年(365天、5小时、49分钟和12秒)的平均长度之间的比率。在

import datetime as dt

start_date = dt.datetime(2010, 12, 31)
end_date = dt.datetime(2019, 5, 16)
print(round((end_date-start_date)/dt.timedelta(365,0,0,0),2)) #8.38
print(round((end_date-start_date)/dt.timedelta(365,5,49,12),2)) #8.38

我刚做了8+((月*30)+天)/365=8.3726的数学。假设每个月30天,一年365天。不太精确,但可以放在一条线上。当你除以365.25这个数字,你得到了什么?它必须有多精确?在

如果您需要绝对精度,我只需要:

from datetime import date

d0 = date(2010, 12, 31)
d1 = date(2019, 5, 16)
delta = d1 - d0
delta_fraction = delta.days/365.25
print(delta_fraction)
# Output: 8.72348

编辑 这是一个简化的解决方案,假设一年中有365.25天(您可以使用365.2425天精确到400年的例外情况)来计算闰年。如果您需要它与excel的输出完全匹配,那么最好是为excel编写vba宏

相关问题 更多 >

    热门问题