我正在尝试获取包含给定一周内的天数的列表。 我可以获得年份和星期。
例如:
>>> year, week, dow = datetime.today().isocalendar()
>>> week
>>> 39
我想得到第 39 周中的 7 天。对于今年,2015 年,我会得到
[21, 22, 23, 24, 25, 26, 27]
如图here
注意
我发现了很多问题:
这不是重复的,我不需要过去 7 天,而且我已经有了当前周数。
我需要获取给定一周内的 7 天,在本例中为第 39 周。感谢您的宝贵时间。
最佳答案
等日历的困难在于它并没有真正计算月份中的日期。因此你必须翻译回来才能得到它。 strptime
可以帮助:
year, week, dow = datetime.today().isocalendar()
result = [datetime.strptime(str(year) + "-" + str(week-1) + "-" + str(x), "%Y-%W-%w").day for x in range(1,7)]
我们在这里所做的是构造一个 striptime
可以理解的字符串,从一周前开始(考虑到从 0 到 1 的计数)并从一周的开始(星期一,这是 1
)并为 future 7 天的每一天构建一个日期时间。
通过在这两个语句之间使用week
(添加或删除周以获得月份休息),我们可以看到它是有效的:
>>> year, week, dow = datetime.today().isocalendar()
>>> result = [datetime.strptime(str(year) + "-" + str(week-1) + "-" + str(x), "%Y-%W-%w").day for x in range(1,7)]
>>> result
[21, 22, 23, 24, 25, 26]
>>> year, week, dow = datetime.today().isocalendar()
>>> week = week + 1
>>> result = [datetime.strptime(str(year) + "-" + str(week-1) + "-" + str(x), "%Y-%W-%w").day for x in range(1,7)]
>>> result
[28, 29, 30, 1, 2, 3]
现在,为了解决评论中提出的两个非常现实的问题,我们必须稍微修改一下:
year, week, dow = datetime.today().isocalendar()
week_start = datetime.strptime(str(year) + "-" + str(week-2) + "-0", "%Y-%W-%w")
result = [(week_start + timedelta(days=x)).day for x in range(0,7)]
这使用timedelta
来递增。为了完成这项工作,我们必须跨周进行备份(因此使用 -2
而不是 -1
)。然后,当我们迭代一周时,for 理解会添加越来越大的时间增量:
>>> year, week, dow = datetime.today().isocalendar()
>>> week_start = datetime.strptime(str(year) + "-" + str(week-2) + "-0", "%Y-%W-%w")
>>> result = [(week_start + timedelta(days=x)).day for x in range(0,7)]
>>> result
[20, 21, 22, 23, 24, 25, 26]
>>> year, week, dow = datetime.today().isocalendar()
>>> week = week + 1
>>> week_start = datetime.strptime(str(year) + "-" + str(week-2) + "-0", "%Y-%W-%w")
>>> result = [(week_start + timedelta(days=x)).day for x in range(0,7)]
>>> result
[27, 28, 29, 30, 1, 2, 3]
关于python - 给定周内的天数/日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32705714/