You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅实现指定月份datetime.date对象的遍历(无填充日期)

当然有更简洁优雅的实现方式!给你两种实用的方案,都比你当前的切片方法更直观健壮:

方案1:纯datetime模块实现(无需calendar)

直接从当月第一天开始,逐天递增到当月最后一天,完全不会引入无关日期:

from datetime import date, timedelta

year = 2019
month = 7

# 当月第一天
start = date(year, month, 1)
# 下月第一天减一天就是当月最后一天
end = date(year, month + 1, 1) - timedelta(days=1)

current = start
while current <= end:
    print(current)
    current += timedelta(days=1)

这个方法逻辑清晰,不需要依赖calendar模块的细节,兼容性也更好。

方案2:改进calendar模块的用法(过滤无关日期)

如果还是想用calendar模块,直接过滤掉不属于目标月份的日期就行,比切片更健壮(比如当周起始日不是周日时,itermonthdates开头可能会有上个月的日期,切片就会出错):

from calendar import Calendar

year = 2019
month = 7

cal = Calendar()
for dt in cal.itermonthdates(year, month):
    # 只保留目标月份的日期
    if dt.month == month:
        print(dt)

这个方法利用了calendar的迭代器,同时通过简单的条件判断剔除填充日期,代码简洁且逻辑明确。

对比你原来的切片方法,这两种方案都更具可读性和健壮性,不会因为日历的周起始设置而出现错误~

内容的提问来源于stack exchange,提问作者Chgad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:23:43