如何用Python生成最近N个年月格式的日期列表?
生成最近N个年月格式字符串的列表
纯标准库实现(无第三方依赖)
通过计算总月份数的方式处理跨年场景,逻辑清晰且无需额外安装包:
import datetime def get_recent_n_months(n): today = datetime.date.today() current_total_months = today.year * 12 + today.month recent_months = [] for offset in range(n): target_total = current_total_months - offset year = target_total // 12 month = target_total % 12 # 处理月份为0的情况(例如1月减1个月对应去年12月) if month == 0: year -= 1 month = 12 # 格式化两位数月份,拼接成目标字符串 recent_months.append(f"{year}-{month:02d}") return recent_months # 测试用例 print(get_recent_n_months(3)) # 若当前为10月,输出 ["2022-10", "2022-09", "2022-08"] print(get_recent_n_months(4)) # 若当前为2月,输出 ["2023-02", "2023-01", "2022-12", "2022-11"]
依赖第三方库的简化实现
如果环境允许安装第三方包,使用python-dateutil的relativedelta可以更直观地处理月份增减,代码更简洁:
首先安装依赖:
pip install python-dateutil
实现代码:
import datetime from dateutil.relativedelta import relativedelta def get_recent_n_months(n): today = datetime.date.today() recent_months = [] for offset in range(n): target_date = today - relativedelta(months=offset) recent_months.append(target_date.strftime("%Y-%m")) return recent_months # 测试用例 print(get_recent_n_months(3)) print(get_recent_n_months(4))
两种方案对比:
- 纯标准库方案:适合环境受限无法安装第三方包的场景,通过总月份数计算规避了跨年的复杂条件判断。
- 第三方库方案:代码可读性更高,逻辑更直观,适合允许安装外部依赖的场景。
内容的提问来源于stack exchange,提问作者taga
相关产品推荐
相关产品推荐

