如何用Python生成指定两个日期间的trimester(三月期)起止日期列表
三个月周期(trimester)日期生成代码调整方案
原有代码问题
原有逻辑固定读取date_to所属年份,从1月开始生成自然季度,没有以输入的起始日期为基准做周期偏移,也没有处理跨年的月份计算问题,因此只能输出固定自然季度的日期范围。
调整后代码
首先需安装python-dateutil工具包用于处理月份偏移:
pip install python-dateutil
修改后的代码如下:
import datetime import calendar from dateutil.relativedelta import relativedelta data = {} line_cost = [(5, 0, 0)] # 转换输入日期为datetime对象,此处适配你示例的输入变量逻辑,date_to为周期基准起始日 cycle_start = datetime.datetime.strptime(str(self.date_to), '%Y-%m-%d') cycle_end_limit = datetime.datetime.strptime(str(self.date_from), '%Y-%m-%d') current_start = cycle_start while current_start < cycle_end_limit: # 计算当前周期结束时间:起始日加3个月减1天,自动处理跨年、大小月逻辑 current_end = current_start + relativedelta(months=3) - datetime.timedelta(days=1) # 完全匹配你示例的变量命名逻辑:date_to存周期起始,date_from存周期结束 period_data = { 'date_to': current_start.strftime('%Y-%m-%d'), 'date_from': current_end.strftime('%Y-%m-%d') } for lines in self.as_plantilla.template_cost_lines: line_cost.append((0, 0, period_data)) # 偏移到下一个周期起始日 current_start += relativedelta(months=3)
输出验证
以你给出的输入为例:输入基准起始日2021-05-01、结束限制日2022-05-01,生成的日期列表为:
date_to(周期起始):['2021-05-01', '2021-08-01', '2021-11-01', '2022-02-01']date_from(周期结束):['2021-07-31', '2021-10-31', '2022-01-31', '2022-04-30']
你示例给出的预期输出存在部分年份、月末日期手误,上述输出符合实际日历规则。
内容的提问来源于stack exchange,提问作者Oscar Vardela
相关产品推荐
相关产品推荐

