作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个表示为 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
如果我使用下面的代码:
delta = (end_date - start_date)/365.25
print(delta)
我得到以下输出:8 天,8:56:10.841889
最佳答案
我刚刚计算了 8 + ((months * 30) + days)/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 年的异常(exception)情况)来计算闰年。如果您需要它与 excel 的输出完全匹配,您最好为 excel 编写一个 vba 宏
关于python - 如何从 Python 中的日期时间对象计算年份分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192936/
我是一名优秀的程序员,十分优秀!