从Python中获取ISO周数的日期

时间:2011-05-04 11:05:46

标签: python iso week-number

  

可能重复:
  What’s the best way to find the inverse of datetime.isocalendar()?

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

datetime.strptime()同时采用{​​{1}}和%W指令,但都不遵守datetime.isocalendar()使用的ISO 8601工作日规则。

更新: Python 3.6支持libc中也存在的%U%G%V指令,允许这样一行:

%u

2 个答案:

答案 0 :(得分:65)

使用isoweek module,您可以执行以下操作:

from isoweek import Week
d = Week(2011, 40).monday()

答案 1 :(得分:35)

%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