如何获取两个指定日期之间的季度编号列表?
解决两个日期之间的季度编号列表问题
嘿,我来帮你搞定这个需求!你已经能把单个日期转换成对应的季度编号了,那生成两个日期之间的连续季度列表其实很容易实现,我给你拆解一下思路,再附上代码示例:
核心思路
- 先把两个起始/结束日期转换成「年份-季度」的二元组(比如2017年7月就是
(2017, 3),2018年4月就是(2018, 2)) - 从起始季度开始,逐个往后遍历季度,每到第4季度之后就回到第1季度,同时年份加1
- 把遍历过程中的每个季度编号收集起来,直到到达结束季度为止
代码实现(Python示例)
首先,先实现单个日期转「年份-季度」的函数:
from datetime import datetime def date_to_quarter(date): # 传入datetime对象,返回(year, quarter) quarter = (date.month - 1) // 3 + 1 return (date.year, quarter)
然后是生成季度列表的核心函数:
def get_quarters_between(start_date, end_date): start_year, start_q = date_to_quarter(start_date) end_year, end_q = date_to_quarter(end_date) quarter_list = [] current_year, current_q = start_year, start_q while True: # 将当前季度加入列表 quarter_list.append(current_q) # 检查是否已经到达结束季度,是则退出循环 if current_year == end_year and current_q == end_q: break # 切换到下一个季度 current_q += 1 if current_q > 4: current_q = 1 current_year += 1 return quarter_list
测试示例
用你提到的日期来测试:
start_date = datetime(2017, 7, 1) end_date = datetime(2018, 4, 1) print(get_quarters_between(start_date, end_date)) # 输出: [3, 4, 1]
另外测试同一年的情况,比如2018年2月到2018年5月:
start_date = datetime(2018, 2, 1) end_date = datetime(2018, 5, 1) print(get_quarters_between(start_date, end_date)) # 输出: [1, 2]
这个逻辑能覆盖所有跨年度和同年度的情况,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

