簡體   English   中英

在Python中將第53周顯示為年周

[英]Show week 53 as yearweek in 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

編輯:自己找到了答案。 請參閱下面的答案作為答案。

首先,在不需要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周,並且所有周的前導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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM