繁体   English   中英

根据 dateutil.relativedelta 大于指定时间量的比较将月份添加到日期

[英]Adding months to a date based on a comparison where dateutil.relativedelta is greater than a specified amount of time

我的目标是根据start_dateend_date之间的时间段长度将指定的月数添加到start_date 超过10年的,加3个月,否则加1个月。 计算必须精确,并且应该能够考虑给定月份以及闰年的特定天数。 我试图通过使用dateutil.relativedelta来实现这一点, dateutil.relativedelta所示:

from dateutil.relativedelta import relativedelta
from dateutil import parser

# Extract date from string
start_date = parser.parse("2050-11-01")
end_date = parser.parse("1980-11-01")

# Calculate difference
delta = relativedelta(start_date, end_date)
print(delta)

if delta > relativedelta(years=+10):
    new_end_date = start_date + relativedelta(months=3)
else:
   new_end_date = start_date + relativedelta(months=1)

print(new_end_date)

但是,这给出了以下输出:

相对增量(年=+70)
类型错误:“relativedelta”和“relativedelta”的实例之间不支持“>”

在 SO 上搜索错误清楚地表明没有简单的方法来比较dateutil.relativedelta 有没有人知道我的用例的解决方法?

这是我的建议:

  • 设置您要测试的(相对)期限(10 年)
  • 将其添加到最早的输入日期
  • 检查新日期是否早于最新输入日期

这样,你仍然可以获得相对岬relativedelta ,但你两个硬盘的日期进行比较:

from dateutil.relativedelta import relativedelta
from dateutil import parser

# Extract date from string
start_date = parser.parse("2050-11-01")
end_date = parser.parse("1980-11-01")

# Set the size of the period
period = relativedelta(years=10)

# Test if adding the period to the earliest date makes it surpass the latest date
if min(start_date, end_date) + period <= max(start_date, end_date):
    new_end_date = start_date + relativedelta(months=3)
else:
   new_end_date = start_date + relativedelta(months=1)

print(new_end_date)
# 2051-02-01 00:00:00

在这种情况下,开始和结束并不意味着更早和更晚,因此您必须执行minmax操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM