Как найти все номера недели, которые являются первой неделей месяца в год python

Я хочу создать событие, которое выпадает на воскресенье каждую первую неделю месяцев.

Это то, что я делаю для определенного номера недели, который является первой неделей june чтобы получить дату:

 from datetime import datetime myDate = "2017 22 0" # here `2017` is year, `22` is week number and `0` =sunday is week day datetime.strptime(myDate, "%Y %W %w") #output... datetime.datetime(2017, 6, 4, 0, 0) 

Поэтому мне нужен список всех недельных номеров, которые являются первой неделей месяца, поэтому я могу зациклиться на нем и получить даты желаний.

Добавление дополнительной информации

Я хочу метод, который возвращает список недельных чисел, которые являются первой неделей месяца, где первая неделя означает, что неделя имеет первое воскресенье.

 def get_week_number(year=2017, day=0): #day 0 means sunday ... ... return [1, 5, 9, 13, 18, 22, ...] 

    Я провел цикл через месяцы, а затем получил первое воскресенье (начиная с 1- го месяца и перейдя на следующий день до тех пор, пока не будет найдено воскресенье), а затем получил неделю с указанием даты:

     from datetime import datetime from datetime import date # dayofweek: Sunday=0, Monday=1 and so on def get_week_number(year=2017, dayofweek=0): weeks = [] for month in range(1, 13): # get first Sunday of month d = date(year, month, 1) while(d.weekday() != dayofweek): d = d.replace(day=d.day + 1) # isocalendar()[1] is the week-of-year field weeks.append(d.isocalendar()[1]) return weeks print(get_week_number(2017, 0)) 

    Результат, однако, отличается от того, что вы ожидаете:

     [1, 6, 10, 14, 18, 23, 27, 32, 36, 40, 45, 49] 

    Я также пробовал с weeks.append(int(d.strftime("%W"))) но он дает те же результаты – я использую Python 3.5.2, а неделя определяется как :

    Год ISO состоит из 52 или 53 полных недель и где неделя начинается в понедельник и заканчивается в воскресенье. Первая неделя года ISO – первая (григорианская) календарная неделя года, содержащая четверг. Это называется неделей номер 1, а год ISO этого четверга такой же, как и по его григорианскому году.

    (Отредактировано, из-за ошибки в нумерации буднего дня)

     >>> import datetime >>> june1 = datetime.datetime(2017,6,1) >>> june1 datetime.datetime(2017, 6, 1, 0, 0) >>> june1_weekday = june1.weekday() >>> if june1_weekday < 6: # 6 indicates Sunday first_sunday_in_june = june1 + datetime.timedelta(days=6-june1_weekday) else: first_sunday_in_june = june1 >>> print(first_sunday_in_june) 2017-06-04 00:00:00 

    Предполагая, что вы хотите, чтобы в течение недели isocalendar() ИСО, вы можете использовать метод isocalendar() . Это дает кортеж (year, weeknumber, weekday) . Это использует соглашение, что недели начинаются с понедельника, а первая неделя года – первая неделя, по крайней мере, четыре дня в году (или, другими словами, неделя с первым четвергом).

     >>> first_sunday_in_june.isocalendar() (2017, 22, 7) 

    Если у вас есть другое соглашение для первого дня недели или первой недели года, вам нужно будет приготовить свою собственную функцию, чтобы получить номер недели.

    Используйте вышеуказанный метод в цикле в течение месяцев, и вы можете создать нужный список с номерами недель.