python - 给定周内的天数/日期

标签 python datetime calendar week-number isodate

我正在尝试获取包含给定一周内的天数的列表。 我可以获得年份和星期。

例如:

>>> 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/

相关文章:

python - 当使用 django 进行 API 调用时,Django REST Framework 的好处是什么?

java 8 Instant.now() 显示错误的即时时间

c# - 如何获取我的应用程序的上次写入或构建时间?

php - 支持节假日的日历库

python - 错误 Azure Synapse Notebook : ImportError: tokenizers>=0. 10.1,此模块正常运行需要 <0.11,但发现 tokenizers==0.9.2

python - 如何在本地机器上使用命令执行远程python以在远程机器上打开网页

python - parsedatetime 显示数据范围?

java - 以编程方式设置工作日

java - 显示错误的时差

python - 如何使用Python将unicode字符串转换为真正的字符串