Существует две распространенные системы нумерации по неделям, и strptime()
имеет две директивы для обработки номеров недель ISO (%W
: недели начинаются в понедельник) и системы нумерации недель, используемой в Северной Америке (%U
: неделиначало в воскресенье).
Я не очень знаком с последней системой, но я рассчитывал, что Excel 2016 есть, и когда я проверял, я обнаружил, что согласен, что в этой системе воскресенье на неделе 51 201816 декабря
=WEEKNUM(DATE(2018,12,16)) --> 51
Википедия дает метод определения недели 1 в североамериканской системе следующим образом: Неделя 1 начинается в воскресенье и содержит 1 января и первую субботу.Или, другими словами, неделя 1 заканчивается в первую субботу января.
Таким образом, до 6 дней недели 1 могут фактически приходиться на предыдущий год, и эти дни также считаются находящимися на неделе 53предыдущий год.
В этой таблице за 7 лет указана дата первого воскресенья года, а слева - дата предыдущего воскресенья.Таким образом, столбец 2 - это 7 дней после столбца 1. Функция Excel 2016 WEEKNUM()
сообщает все даты в столбце 2 как неделю 2:
Sunday falls on Week 2 begins
--------------- -------------
26-Dec-2021 02-Jan-2022
27-Dec-2015 03-Jan-2016
28-Dec-2025 04-Jan-2026
29-Dec-2019 05-Jan-2020
30-Dec-2018 06-Jan-2019
31-Dec-2017 07-Jan-2018
01-Jan-2017 08-Jan-2017
Если я спрашиваю Python 2.7 или 3.7 о воскресенье на неделе 1эти годы, например:
for year in (2022,2016,2026,2020,2019,2018,2017):
print(time.strftime("%d-%b-%Y",time.strptime("{year} 1 0".format(year=year), "%Y %U %w")))
Я получаю
02-Jan-2022
03-Jan-2016
04-Jan-2026
05-Jan-2020
06-Jan-2019
07-Jan-2018
01-Jan-2017
Итак, для директивы %U
стандартной библиотеки Python первая неделя начинается в первое воскресенье января, а незаканчивается в первую субботу.Это разумный подход, просто другой.Разница означает, что %U
номера недель совпадают с номерами недель Excel только в те годы, когда 1 января - воскресенье.Во все остальные годы, включая 2018 год, как вы сообщаете, %U
даст номер недели, который на единицу меньше.
Я сообщил об этом как об ошибке на bugs.python.org, выпуск 35535 .Похоже, что все согласны с тем, что текущее поведение соответствует документации.То, что Python 2.3 согласен с Excel и Википедией, а Python 2.7 - нет, кажется, считается неубедительным.
Так что, если раньше этого не было, то это известная проблема сейчас.