python - 计算两个日期之间的年数,但以标准方式四舍五入

标签 python

我想获得两个日期之间的四舍五入的年数。 relativedeltayears 属性几乎可以做到这一点,但因为它服务于不同的用例,所以它总是向下舍入而不是使用标准舍入规则:

from datetime import datetime, date
from dateutil.relativedelta import relativedelta

almost_one_year_ago = date.today() - relativedelta(years=1) + relativedelta(days=1)
print(relativedelta(date.today(), almost_one_year_ago).years)

这输出0,我想要1

有没有一种好方法可以按照标准舍入规则将年数作为整数获取?例如:如果低于 0.5 年则向下舍入,如果等于或高于 0.5 年则向上舍入?

最佳答案

您可以计算天数差异,将其除以 365,然后四舍五入,如下所示:

print(round((date.today() - almost_one_year_ago).days/365))

另一种考虑闰年的方法:

from datetime import datetime, date
from dateutil.relativedelta import relativedelta

target_date = date.today() - relativedelta(years=1) + relativedelta(days=1)

year_cnt = 0
one_year_ago = date.today() - relativedelta(years=1)
while ( target_date < one_year_ago ):
    year_cnt += 1 # because it's a full year
    one_year_ago -= relativedelta(years=1)

half_year_ago = one_year_ago + relativedelta(months=6)
if ( target_date <= half_year_ago ):
    year_cnt += 1 # because it's greater or equal a half year (>= 0.5)

print(year_cnt)

我只是计算所有整年,然后检查剩余时间是否超过半年。

关于python - 计算两个日期之间的年数,但以标准方式四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52290952/

相关文章:

python - 'int' 类型的参数不可迭代

python - 无法使用 anaconda 发行版在 Windows 7 上构建 Slycot

python - 我应该在 docker build 期间运行测试吗?

python - numpy.as_strided 的结果是否取决于输入数据类型?

python - 在 Python 中打印树数据结构

python - 展平多索引 Pandas 数据框,其中列名成为值

python - 用户警告 : Module matplotlib was already imported

python - 检查某个值在时间范围内是否超过阈值的最佳方法

python - 具有外部数据库的 Sqlite 更新 Hook

python - 使用 statsmodels 预测置信区间