在Python中将第53周显示为yearweek

2024-10-04 11:33:25 发布

您现在位置: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

编辑: 我自己找到了答案。请参阅下面的接受答案。


Tags: fromimporttodaydatetimedatetimestarttimedelta
2条回答

使用以下代码使其工作。在

这个结果与我最初的问题的结果完全相同,但是现在包括了第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代替尝试用时间.strftime(“%Y%W”,curDate)

输出:

^{pr2}$

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

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

%W: Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.

(强调我的)

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

你的结果是正确的。在

相关问题 更多 >