在Python中每周展示第53周

时间:2016-03-02 14:28:18

标签: python

目前结果显示过去10周内的一年+一周。与201604一样,前4位数为年份,最后2位为星期数。我的问题是它没有显示第53周(从2015年12月28日星期一开始到2016年1月3日结束)。

有没有办法在结果中显示第53周?

import datetime
from datetime import timedelta
import time
from datetime import date

yearweekArray = []
today = date.today()
weekday = today.weekday()
start_delta = datetime.timedelta(days=weekday, weeks=10)
startOfWeek = today - start_delta

for i in range(0,10):
    yearweek = startOfWeek + timedelta(weeks=i)
    curDate = time.strptime(str(yearweek), "%Y-%m-%d")
    yearweekArray.append(time.strftime("%Y%W", curDate))
print yearweekArray

修改: 我自己找到了答案。请参阅下面接受的答案以获得答案。

2 个答案:

答案 0 :(得分:0)

首先,您在不需要时使用time模块,datetime.date使用strftime方法。

接下来,2015年没有第53周!至少当你遵循Python惯例时:

  

%W:一年中的周数(星期一作为一周的第一天)作为十进制数[00,53]。 第一个星期一之前的新年中的所有日子都被视为第0周

(强调我的)

这意味着2015年1月6日星期一属于第1周,2015年1月1日星期四属于第0周。因此,2015年12月21日星期一属于第51周,2015年12月28日星期一属于第52周。

您的结果是正确的。

答案 1 :(得分:0)

使用以下代码使其正常工作。

这给出了与原始问题输出完全相同的结果,但现在包括第53周,并且前导0为所有周数小于2位。

import datetime
from datetime import timedelta
import time
from datetime import date

yearweekArray = []
today = date.today()
weekday = today.weekday()
start_delta = datetime.timedelta(days=weekday, weeks=10)
startOfWeek = today - start_delta

for i in range(0,10):
    yearweek = startOfWeek + timedelta(weeks=i)
    curDate = time.strptime(str(yearweek), "%Y-%m-%d")
    curYear = int(time.strftime("%Y", curDate))
    curMonth = int(time.strftime("%m", curDate))
    curDay = int(time.strftime("%d", curDate))
    weekNum = "%02d" % (datetime.date(curYear, curMonth, curDay).isocalendar()[1],)
    yearweekArray.append(str(curYear) + str(weekNum))
print yearweekArray

这里的关键是使用isocalendar代替尝试使用time.strftime(“%Y%W”,curDate)转换它

<强>输出:

['201552', '201553', '201601', '201602', '201603', '201604', '201605', '201606', '201607', '201608']