python relativedelta 在 31 个月内没有工作

python relativedelta not working for months of 31

我想根据上一季度的结束日期创建季度日期。 这意味着,对于每个季度的结束日期,我必须减去 3 个月才能计算出季度的开始日期和上一季度的结束日期。

问题是,当我这样做时

ref_date - relativedelta(months=+3)

和 ref_date 是 6 月 30 日,它 return 是 3 月 30 日,而它应该是 return 3 月 31 日。 有什么解决办法吗?

假设您正在处理 datetime.date 个对象。

您可以使用 calendar.monthrange 检查一年中某月有多少天,并将其用作您的日期,而不仅仅是否定结果。当你弄清楚你必须创建一个新的 datetime.date 因为它的属性是不可写的:

import datetime
from dateutil.relativedelta import relativedelta
import calendar

ref_date = datetime.date(2022, 6, 30)
end_date = ref_date - relativedelta(months=3)
n_days = calendar.monthrange(end_date.year, end_date.month)[1]
end_date = datetime.date(end_date.year, end_date.month, n_days)
print(end_date)

输出:

2022-03-31