Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将第53周显示为yearweek_Python - Fatal编程技术网

在Python中将第53周显示为yearweek

在Python中将第53周显示为yearweek,python,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

目前,结果显示过去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
编辑:
我自己找到了答案。有关答案,请参见下面的已接受答案。

首先,当不需要时,您可以使用
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周


您的结果是正确的。

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

这与我最初的问题的输出结果完全相同,但现在包括了第53周,所有少于2位数的周都有一个前导0

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']
,当我将其转换为%W时,我知道它属于第0周。但是有没有办法使第0周显示为第53周?我注意到“print datetime.date(2015,12,28).isocalendar()[1]”确实返回了第53周。这有答案吗?