Duplicata possible:
Quelle est la meilleure façon de trouver l'inverse de datetime.isocalendar ()?
J'ai un numéro d'année et de semaine ISO 8601, et je dois le traduire à la date du premier jour de cette semaine (lundi). Comment puis-je faire ceci?
datetime.strptime () prend à la fois un %W
et un %U
directive, mais ni l'un ni l'autre ne respecte les règles de semaine ISO 8601 que datetime.isocalendar () utilise.
Mise à jour: Python 3.6 prend en charge le %G
, %V
et %u
des directives également présentes dans libc, autorisant ce one-liner:
>>> datetime.strptime('2011 22 1', '%G %V %u')
datetime.datetime(2011, 5, 30, 0, 0)
% W prend le premier lundi pour être dans la semaine 1 mais ISO définit la semaine 1 pour contenir le 4 janvier. Donc, le résultat de
datetime.strptime('2011221', '%Y%W%w')
est interrompu par un si le premier lundi et le 4 janvier sont dans des semaines différentes. C'est le cas si le 4 janvier est un vendredi, un samedi ou un dimanche. Donc, ce qui suit devrait fonctionner:
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
Avec le module isoweek vous pouvez le faire avec:
from isoweek import Week
d = Week(2011, 40).monday()