【问题标题】:Print last week dates only corresponding to weekdays仅打印与工作日对应的上周日期
【发布时间】:2018-10-31 19:59:45
【问题描述】:

我有以下代码:

from datetime import date
from datetime import timedelta
today = datetime.date.today() 

for i in range(0,7):
    print (today - timedelta(days=i))
2018-10-31
2018-10-30
2018-10-29
2018-10-28
2018-10-27
2018-10-26
2018-10-25

我想要的只是打印工作日,不包括周末。所以,我想要的结果应该是:

2018-10-31
2018-10-30
2018-10-29
2018-10-26
2018-10-25
2018-10-24
2018-10-23

我可以在哪里修改我的代码以达到预期的效果?

【问题讨论】:

标签: python date weekday


【解决方案1】:

使用datetime.date.weekday(),其中:

以整数形式返回星期几,其中星期一为 0,星期日为 6。

from datetime import date
from datetime import timedelta

today = date.today()

for i in range(7):
    d = today - timedelta(days=i)
    if d.weekday() < 5:            # Here
        print(d)

生产:

2018-10-31 2018-10-30 2018-10-29 2018-10-26 2018-10-25

这将为您提供过去 7 天内的工作日。或者,如果您想要前 7 个工作日,请考虑:

from datetime import date
from datetime import timedelta

today = date.today()

num_weekdays = 0
for i in range(10):
    d = today - timedelta(days=i)
    if d.weekday() < 5:
        print(d)
        num_weekdays += 1

    if num_weekdays >= 7:
        break

这个版本基本相同,范围停止从 7 变为 10,并增加了num_weekdays 计数器。我们在打印日期时递增计数器,一旦达到 7,我们就会中断循环(否则我们可能会打印 8 个日期,具体取决于 today 的星期几)。

或者,另一种方式:

from datetime import date
from datetime import timedelta

today = date.today()

prev_days = [today - timedelta(days=i) for i in range(10)]  # Get 10 previous days
prev_days = [d for d in prev_days if d.weekday() < 5]       # Filter out the weekends
for d in prev_days[:7]:                                     # Select the first 7
    print(d)

类似的想法,我们创建了一个名为prev_days 的包含 10 个之前日期的列表。然后,我们通过过滤掉周末日期来过滤该列表。然后,在 for 循环中,我们只循环过滤列表的前 7 个元素,因此我们最多打印 7 个日期。

【讨论】:

  • 你快到了,但你的输出只列出了 5 个日期,但如果我想列出 7 个工作日怎么办?谢谢
  • @MGB.py 我在其中编辑了一些内容。它有效,但我对此并不感到兴奋。如果您不立即需要它,请考虑在 10 分钟左右后再回来查看我是否已将答案再次编辑为更简洁的内容。
  • 谢谢,这正是我想要的。
  • 如果您能解释一下他们在做什么,我将不胜感激。我对理解代码有点困惑。谢谢
  • @MGB.py 我添加了另一个版本和一些关于每个版本的解释
猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 2012-07-04
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多