Obtener la fecha del número de la semana

Por favor, ¿qué hay de malo con mi código?

import datetime d = "2013-W26" r = datetime.datetime.strptime(d, "%YW%W") print(r) 

Pantalla “2013-01-01 00:00:00”, Gracias.

Un número de semana no es suficiente para generar una fecha; Necesitas un día de la semana también. Añadir un valor predeterminado:

 import datetime d = "2013-W26" r = datetime.datetime.strptime(d + '-1', "%YW%W-%w") print(r) 

El patrón -1 y -%w le dice al analizador que elija el lunes de esa semana. Esto produce:

 2013-07-01 00:00:00 

%W usa el lunes como el primer día de la semana. Si bien puede elegir su propio día de la semana, puede obtener resultados inesperados si se desvía de eso.

Consulte la sección de comportamiento de strftime() y strptime() en la documentación, nota al pie 4:

Cuando se usa con el método strptime() , %U y %W solo se usan en cálculos cuando se especifican el día de la semana y el año.

Tenga en cuenta que si su número de semana es una fecha de semana ISO , ¡querrá usar %GW%V-%u lugar! Esas directivas requieren Python 3.6 o más reciente.

 import datetime res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w") print res 

La adición de 1 como día de la semana dará un inicio exacto de la semana actual. La adición de timedelta (días = 6) le dará el fin de semana.

 datetime.datetime(2018, 7, 23) 

Para completar las otras respuestas, si está utilizando números de semana ISO , esta cadena es apropiada (para obtener el lunes de un número de semana ISO determinado):

 import datetime d = '2013-W26' datetime.datetime.strptime(d + '-1', '%GW%V-%u') print(r) 

%G , %V , %u son equivalentes ISO de %Y , %W , %w , por lo que esto produce:

 2013-06-24 00:00:00 

Disponible en Python 3.6 +; desde docs .

Aquí hay una función útil que incluye el problema con cero semanas.