Ошибка в python3 datetime

#python-3.x

Вопрос:

В Python есть ошибка, которую он должен был вернуть на неделю раньше, по крайней мере, согласно https://www.epochconverter.com/weeks/2020

Кто-нибудь может подтвердить?

 Python 3.7.8 (default, Jul  7 2020, 01:20:31) 
[Clang 8.0.1 (tags/RELEASE_801/final 366581)] on freebsd12
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, time, datetime
>>> 
>>> 
>>> def mkTimeFromWeek (week, year):
...   return (datetime.datetime.strptime(str(year)   "-"   str(week)  "-1", "%Y-%W-%w"))
... 
>>> print(mkTimeFromWeek("33", "2020"))
2020-08-17 00:00:00
>>> 
 

Ответ №1:

Нет, это не ошибка, ваш источник ссылок учитывает первую неделю 2020 года с понедельника 30 декабря по воскресенье 5 января.

 Week number     From Date   To Date
Week 52, 2019   December 23, 2019   December 29, 2019
Week 01 December 30, 2019   January 5, 2020
Week 02 January 6, 2020 January 12, 2020
Week 03 January 13, 2020    January 19, 2020
 

Однако документы python объясняют, что для %W

Номер недели года (понедельник как первый день недели) в виде десятичного числа. Все дни в новом году, предшествующие первому понедельнику, считаются неделей 0.

Поскольку первый понедельник января приходится на 6-е число, все дни до этого считаются неделей 0. Таким образом, неделя 1 в 2020 году в python datetime начнется 6 января 2020 года.

Таким образом, причина, по которой он заканчивается на 1 неделю, заключается в том, что все даты в году до первого понедельника года считаются неделей 0, а не неделей 1. Вот почему в вашем коде указана ваша 1 неделя.