按日期间隔加指定月份时dateutil.relativedelta无法比较的解决方案求助
可行解决方案
方案1:通过日期比较直接规避relativedelta实例比较问题(最推荐)
不用直接比较两个relativedelta实例,把「间隔是否超过10年」的判断转换成日期运算即可,完全保留relativedelta对闰年、不同月份天数、月末日期的适配能力:
from dateutil.relativedelta import relativedelta from dateutil import parser # 提取日期 start_date = parser.parse("2050-11-01") end_date = parser.parse("1980-11-01") # 判断逻辑:结束日期加10年后仍早于开始日期,说明间隔超过10年 if start_date > end_date + relativedelta(years=10): 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,符合间隔70年加3个月的预期。
方案2:通过relativedelta拆分属性判断
如果需要用到间隔的明细数值做更细粒度的逻辑处理,可以直接读取relativedelta的拆分属性做判断:
from dateutil.relativedelta import relativedelta from dateutil import parser start_date = parser.parse("2050-11-01") end_date = parser.parse("1980-11-01") delta = relativedelta(start_date, end_date) # 年数大于10,或年数等于10且有额外的月/日偏移,都判定为间隔超过10年 if delta.years > 10 or (delta.years == 10 and (delta.months > 0 or delta.days > 0)): new_end_date = start_date + relativedelta(months=3) else: new_end_date = start_date + relativedelta(months=1) print(new_end_date)
内容的提问来源于stack exchange,提问作者quadratecode
相关产品推荐
相关产品推荐

