我正在尝试获取本月的几周。我可以获取该月的星期数(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
答案 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))