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)
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
avec le module isoweek vous pouvez le faire avec:
from isoweek import Week
d = Week(2011, 40).monday()