Obtenir la date du numéro de la semaine ISO en Python [dupliquer]

possibilité de duplication:

Quelle est la meilleure façon de trouver l'inverse de datetime?isocalendar ()?

j'ai un numéro ISO 8601 année et semaine, et je dois traduire cela à la date du premier jour de cette semaine (lundi). Comment puis-je faire cela?

datetime.strptime () prend à la fois un %W et un %U , mais ni l'un ni l'autre n'adhère à la norme ISO 8601 de la semaine que datetime.isocalendar () utiliser.

mise à jour: Python 3.6 prend en charge les directives %G , %V et %u également présents dans la libc, permettant ce one-liner:

>>> datetime.strptime('2011 22 1', '%G %V %u')
datetime.datetime(2011, 5, 30, 0, 0)
36
demandé sur Community 2011-05-04 15:05:45

2 réponses

%W prend le premier lundi pour être dans la semaine 1 mais ISO définit la semaine 1 pour contenir 4 janvier. Donc le résultat de

datetime.strptime('2011221', '%Y%W%w')

est éteint d'un iff 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. Ainsi, 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
32
répondu Uwe Kleine-König 2011-05-04 13:16:34

avec le module isoweek vous pouvez le faire avec:

from isoweek import Week
d = Week(2011, 40).monday()
61
répondu gisle 2011-10-07 12:15:20