2017-08-17 3 views
0

実際に文字列オブジェクトとして開始するyyyywwを201731のように変換しようとしています。自分自身を含めて最後の6週間をキャプチャしたいと思います。Pythonを使用して別の年を越えるISO Weekリストを返します

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の出力は次のようになります。

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

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

、これが動作しているようですが、問題は、私は201702のようなクロスオーバー年でそれをテストする場合には、これを返しています

これはかなり良く見えますが、私はISO週にそれを必要としますので、週の00はないと思います。年の最後の週は53または52でなければなりませんが、51ではなくなります。

これをどのように適応させるのですか?

答えて

0

これは "isoweek"パッケージがインストールされている必要がありますが、私はstr 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

関連する問題