小编典典

从Python中的ISO周编号获取日期

python

我有一个ISO 8601年和周的编号,我需要将此值转换为该周(星期一)的第一天的日期。我怎样才能做到这一点?

datetime.strptime()同时使用%W%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)

更新2Python
3.8
添加了该fromisocalendar()方法,该方法更加直观:

>>> datetime.fromisocalendar(2011, 22, 1)
datetime.datetime(2011, 5, 30, 0, 0)

阅读 265

收藏
2020-12-20

共1个答案

小编典典

%W将第一个星期一定为第1周,但ISO定义第1周为1月4日。所以从

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

如果第一个星期一和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
2020-12-20