2017-08-17 17 views
0

我想轉換一個yyyyww,它實際上是一個字符串對象,我認爲它就像201731一樣。我想捕獲包括它自己在內的最後6周。返回ISO周列表,它使用python跨越另一年

def generate_6_last_week(yearweek): 
    weeks = [int(yearweek)] 
    date = time.mktime(datetime.strptime(str(yearweek)+"0","%Y%W%w").timetuple()) 
    for i in range(1,6): 
     date = date-604800 # 60*60*24*7 
     weeks.append(int(datetime.fromtimestamp(int(date)).strftime('%Y%W'))) 
    return weeks 

generate_6_last_week(201731) 

所以輸出爲201731應該是:

[201731, 201730, 201729, 201728, 201727, 201726] 

,這似乎工作,問題是,如果我用交叉一年測試它像201702它返回:

[201702, 201701, 201700, 201651, 201650, 201649] 

這也看起來不錯,但我需要它在ISO周,所以不應該有一個星期00我認爲和一年的最後一週應該是53或52,但不是51.

任何想法如何適應此?

回答

0

這需要安裝「isoweek」軟件包,但給了我一些我想要的操作YYYYWW格式的操作,並且與交叉年。

from isoweek import Week 
yearweek = "201702" 

weeks = [int(yearweek)] 

x = 1 
for i in range(5): 
    week = int(str(Week(int(yearweek[:4]), int(yearweek[-2:])-x)).replace("W","")) 
    weeks.append(week) 
    x +=1 

print(weeks) 

或者以函數格式。

def generate_6_last_week(yearweek): 
    weeks = [int(yearweek)] 
    x = 1 
    for i in range(5): 
     week = int(str(Week(int(yearweek[:4]), int(yearweek[-2:])-x)).replace("W","")) 

     weeks.append(week) 
     x +=1 

    print(weeks) 

generate_6_last_week("201702") 
0

我對striptime()並不瞭解。所以我通過編寫我自己的代碼解決了這個問題。下面的代碼:

date=input() 

a=int(date[0:4]) 
b=int(date[4:]) 

k=5-b 

finallist=[] 

def m(x,y): 
    return(x-y) 


if b>=5: 
    date=int(date) 
    finallist=[date,date-1,date-2,date-3,date-4,date-5] 
    print(finallist) 

else: 
    date=int(date) 
    for i in range(b+1): 
     finallist.append(date) 
     date-=1 
    a-=1 
    b=52 
    date=int(str(a)+str(b)) 
    for i in range(k): 
     finallist.append(date) 
     date-=1 
    print(finallist) 

201700[201700, 201652, 201651, 201650, 201649, 201648]

201702[201702, 201701, 201700, 201652, 201651, 201650]

ALITER:有一個更簡單的方法來做到這一點。只需將1添加到列表中的這些特定列表項中即可:p

+0

感謝解決方法M.Hamel,但需要一個更清晰可靠的方法。我認爲我發現了另一個黑客,但需要isoweek軟件包。 – IcemanBerlin