Если вы используете только номер недели isocalendar через доску, должно быть достаточно:
import datetime
week = date(year=2014, month=1, day=1).isocalendar()[1]
Возвращает второго члена кортежа, возвращенного isocalendar для номера нашей недели.
Однако, если вы собираетесь использовать функции даты, которые имеют дело с григорианским календарем, только isocalendar не будет работать! Возьмите следующий пример:
import datetime
date = datetime.datetime.strptime("2014-1-1", "%Y-%W-%w")
week = date.isocalendar()[1]
Строка здесь говорит, что мы должны вернуть понедельник первой недели 2014 года в качестве нашей даты. Когда мы используем isocalendar для получения номера недели здесь, мы ожидаем получить тот же номер недели назад, но мы этого не делаем. Вместо этого мы получаем номер недели 2. Почему?
Неделя 1 в григорианском календаре - это первая неделя с понедельником. Неделя 1 в isocalendar - это первая неделя, содержащая четверг. Неполная неделя в начале 2014 года содержит четверг, поэтому по isocalendar это неделя 1 и составляет date
неделя 2.
Если мы хотим получить григорианскую неделю, нам нужно будет перейти с изокалендаря на григорианский. Вот простая функция, которая делает свое дело.
import datetime
def gregorian_week(date):
# The isocalendar week for this date
iso_week = date.isocalendar()[1]
# The baseline Gregorian date for the beginning of our date's year
base_greg = datetime.datetime.strptime('%d-1-1' % date.year, "%Y-%W-%w")
# If the isocalendar week for this date is not 1, we need to
# decrement the iso_week by 1 to get the Gregorian week number
return iso_week if base_greg.isocalendar()[1] == 1 else iso_week - 1