python - 从Python中的ISO周数获取日期[重复]

可能重复:
What’s the best way to find the inverse of datetime.isocalendar()?
我有一个ISO 8601年和周号,我需要把它翻译成那个星期(星期一)的第一天的日期。我该怎么做?
datetime.strptime()同时接受%W%U指令,但两者都不遵守使用的ISO 8601工作日规则。
更新:datetime.isocalendar()支持libc中也存在的%G%V%u指令,允许此一行:

>>> datetime.strptime('2011 22 1', '%G %V %u')
datetime.datetime(2011, 5, 30, 0, 0)


最佳答案:

%w将第一个星期一定为第1周,但iso将第1周定义为包含1月4日。所以结果是

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

1月1日和4日的第一个星期一是在不同的星期由一个IFF关闭的。
如果1月4日是星期五、星期六或星期日,则是后者。
因此,以下内容应该有效:
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