从Python中获取ISO周数的日期

Eri*_*and 43 python iso week-number

可能重复:
找到datetime.isocalendar()的反转的最佳方法是什么?

我有ISO 8601年和周编号,我需要将其翻译为该周(星期一)第一天的日期.我怎样才能做到这一点?

datetime.strptime()接受a %W和a %U指令,但都不遵守datetime.isocalendar()使用的ISO 8601工作日规则.

更新: Python的3.6支持%G,%V%u指令也存在于libc中,使这一个班轮:

>>> datetime.strptime('2011 22 1', '%G %V %u')
datetime.datetime(2011, 5, 30, 0, 0)
Run Code Online (Sandbox Code Playgroud)

小智 68

使用isoweek模块,您可以使用:

from isoweek import Week
d = Week(2011, 40).monday()
Run Code Online (Sandbox Code Playgroud)


Uwe*_*nig 36

%W将第一个星期一视为第1周,但ISO将第1周定义为包含1月4日.所以结果来自

datetime.strptime('2011221', '%Y%W%w')
Run Code Online (Sandbox Code Playgroud)

如果第一个星期一和1月4日是在不同的星期,则会被一个人拒之门外.如果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
Run Code Online (Sandbox Code Playgroud)