首页 > 解决方案 > Python:迭代一个月内的所有日子

问题描述

有没有一种简单的方法可以遍历给定月份的所有日子?

我想要一种方法,其中我正在迭代的对象将天数作为datetime.date对象。我已经找到了该calendar模块及其Calendar类和相应的方法itermonthdates(year, month)

我的问题是生成的迭代器包含代表完整周的“填充”天。例如,2019 年 7 月在星期三 (31) 结束。所以这一周是不完整的,并itermonthdates()添加了 8 月 1 日至 4 日的日期。

我不想要这种行为。

我的第一个猜测是:

from calendar import Calendar, monthrange
c = Calendar()

for date in list(c.itermonthdates(2019, 7))[:monthrange(2019, 7)[1]]:
    print(date)

它的行为符合预期,但我不确定是否有更好、更优雅的方式来做到这一点。

标签: pythondateiteration

解决方案


只需按月过滤date对象。

for d in [x for x in c.itermonthdates(2019, 7) if x.month == 7]:

推荐阅读