Python调用API循环日期范围时如何按日同步递增起止日期
问题描述
- 需求说明:开发时需要向API传入
start_date和end_date参数,在指定日期范围内循环调用接口拉取数据。 - 示例场景:指定初始范围为
start_date = '2022-05-23'、end_date ='2022-05-26'时,循环调用API要以1天为步长递进,每次传入的起止日期组合如下:
start_date = '2022-05-23' and end_date ='2022-05-24' start_date = '2022-05-24' and end_date ='2022-05-25' start_date = '2022-05-25' and end_date ='2022-05-26' start_date = '2022-05-26' and end_date ='2022-05-27' start_date = '2022-05-27' and end_date ='2022-05-28' start_date = '2022-05-28' and end_date ='2022-05-29'
- 现存问题:现有初步代码已经实现
start_date按日递增,但无法实现end_date始终取当前start_date加1天的逻辑,当前代码如下:
from datetime import datetime, timedelta start_date = "2022-05-24" end_date = "2022-05-29" start_dt = datetime.strptime(start_date, "%Y-%m-%d") end_dt = datetime.strptime(end_date, "%Y-%m-%d") delta = timedelta(days=1) while start_dt <= end_dt: print(f"start_dt:{start_dt}") print(f"end_dt:{end_dt}") start_dt += delta
解决方案
原代码逻辑的核心问题是混淆了两个概念:初始化的end_dt是整个循环的终止边界,不是每次调用API要传入的结束日期。每次请求的end_date只需要在循环内部基于当前轮次的start_dt动态加1天计算即可。
修正后的可直接运行代码:
from datetime import datetime, timedelta start_date = "2022-05-24" end_date = "2022-05-29" start_dt = datetime.strptime(start_date, "%Y-%m-%d") end_dt = datetime.strptime(end_date, "%Y-%m-%d") delta = timedelta(days=1) while start_dt <= end_dt: # 动态计算当前轮次传给API的结束日期 current_end_dt = start_dt + delta # 格式化为字符串后即可传入API api_start = start_dt.strftime("%Y-%m-%d") api_end = current_end_dt.strftime("%Y-%m-%d") print(f"start_date = '{api_start}' and end_date ='{api_end}'") # 日期递进 start_dt += delta
运行输出结果完全匹配步长要求:
start_date = '2022-05-24' and end_date ='2022-05-25' start_date = '2022-05-25' and end_date ='2022-05-26' start_date = '2022-05-26' and end_date ='2022-05-27' start_date = '2022-05-27' and end_date ='2022-05-28' start_date = '2022-05-28' and end_date ='2022-05-29' start_date = '2022-05-29' and end_date ='2022-05-30'
如果需要对齐示例中从2022-05-23起始的范围,直接把初始
start_date变量值修改为"2022-05-23"即可。
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

