sistema - Obtenga la fecha del número de semana ISO en Python
restar fechas con python (2)
% W toma el primer lunes en la semana 1, pero ISO define la semana 1 como el 4 de enero. Entonces el resultado de
datetime.strptime(''2011221'', ''%Y%W%w'')
está desactivado por uno si el primer lunes y el 4 de enero están en diferentes semanas. Este último es el caso si el 4 de enero es un viernes, sábado o domingo. Entonces, lo siguiente debería funcionar:
from datetime import datetime, timedelta, date
def tofirstdayinisoweek(year, week):
ret = datetime.strptime(''%04d-%02d-1'' % (year, week), ''%Y-%W-%w'')
if date(year, 1, 4).isoweekday() > 4:
ret -= timedelta(days=7)
return ret
Posible duplicado:
¿Cuál es la mejor manera de encontrar el inverso de datetime.isocalendar ()?
Tengo un número de año y semana ISO 8601, y necesito traducir esto a la fecha del primer día de esa semana (lunes). ¿Cómo puedo hacer esto?
datetime.strptime() toma una directiva %W
y una directiva %U
, pero ninguna cumple con las reglas de día de la semana ISO 8601 que usa datetime.isocalendar() .
Actualización: Python 3.6 admite las directivas %G
, %V
y %u
también presentes en libc, lo que permite esta línea única:
>>> datetime.strptime(''2011 22 1'', ''%G %V %u'')
datetime.datetime(2011, 5, 30, 0, 0)
Con el módulo isoweek puedes hacerlo con:
from isoweek import Week
d = Week(2011, 40).monday()