Python当月的日历周列表

时间:2018-07-17 07:28:12

标签: python datetime

我正在尝试获取本月的几周。我可以获取该月的星期数(current_w),但是我需要以正确的顺序获取列表。例如,对于7月,它将是w = [27, 28, 29, 30],因为当前周处于该月4周的第三顺序。有人可以帮我吗?

import datetime

kw = datetime.datetime.today().isocalendar()[1]
weeks = [7,14,21,28]
    for idx, i in enumerate(weeks):
        delta = datetime.timedelta(days=i)
        if (a - delta).month != a.month:
            current_w = idx

2 个答案:

答案 0 :(得分:4)

您可以使用datetime来获取第一周和最后一周,然后获取两者之间的所有内容。

import datetime
import calendar

year = datetime.datetime.now().year
month = datetime.datetime.now().month
first_week = datetime.datetime(year, month, calendar.monthrange(year, month)[0]).isocalendar()[1]
last_week = datetime.datetime(year, month, calendar.monthrange(year, month)[1]).isocalendar()[1]

print(list(range(first_week, last_week + 1)))

from datetime import datetime将为您节省所有datetime.datetime的用法。

答案 1 :(得分:1)

如果您只希望一个月中完全包含几周,则第一周将是包含该月7日的一周。最后一周将在包含下个月1日的一周之前。

足以提供以下功能:

def weeks_in_month(month, year=None):
    """Returns the (ISO) weeks fully contained in a month.
month is an integer between 1 and 12. Year is the current year
if not given"""
    if year is None:
        year = datetime.date.today().year
    first = datetime.date(year, month, 7).isocalendar()[1]
    nextd = datetime.date(year + 1, 1, 1) if month == 12 \
        else datetime.date(year, month + 1, 1)
    nextw = nextd.isocalendar()[1]
    return list(range(first, nextw))