返回ISO周列表,它使用python跨越另一年
问题描述:
我想转换一个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.
任何想法如何适应此?
答
这需要安装“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")
答
我对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
感谢解决方法M.Hamel,但需要一个更清晰可靠的方法。我认为我发现了另一个黑客,但需要isoweek软件包。 – IcemanBerlin