如何创建一系列周的系列?

时间:2018-10-03 17:48:14

标签: python datetime series

我希望从现在开始创建最近6个工作周的列表。

我目前可以使用的是:

import datetime
cww = datetime.datetime.now().isocalendar()[1]
cy = datetime.datetime.now().isocalendar()[0]
l6ww = [str(cy)[2:]+'WW'+str(w) for w in range(cww-5,cww+1)]

print l6ww

['18WW35', '18WW36', '18WW37', '18WW38', '18WW39', '18WW40']

这将一直持续到明年的第一个WW。我可以想到几种解决该问题的蛮力方法,但是想要一些更优雅的方法。

1 个答案:

答案 0 :(得分:1)

您可以使用datetime.timedelta()

import datetime

now = datetime.datetime.now().isocalendar()

l6ww = [(datetime.datetime.now() - datetime.timedelta(weeks=x)).isocalendar() for x in range(6)]

final = [str(i[0])[2:] + 'WW' + str(i[1]) for i in l6ww][::-1]

收益:

['18WW35', '18WW36', '18WW37', '18WW38', '18WW39', '18WW40']

即使您度过了新的一年(无论是向前x周还是在过去x周),此功能都可以使用。您可以稍作修改,以继续进行代码:

l6ww = [(datetime.datetime.now() + datetime.timedelta(weeks=x)).isocalendar() for x in range(15)]

final = [str(i[0])[2:] + 'WW' + str(i[1]) for i in l6ww]

收益:

['18WW40', '18WW41', '18WW42', '18WW43', '18WW44', '18WW45', '18WW46', '18WW47', '18WW48', '18WW49', '18WW50', '18WW51', '18WW52', '19WW1', '19WW2']