【问题标题】:Python elegant way of finding the last weekday [duplicate]Python找到最后一个工作日的优雅方式[重复]
【发布时间】:2021-04-01 07:38:32
【问题描述】:

我需要找到最后一个工作日(不考虑节假日)。有没有比我目前使用的更优雅/更强大的实现方式?

from datetime import date
b = date.today() - timedelta(days=1)
while b.weekday()>=5:
    b = b - timedelta(days=1)

【问题讨论】:

  • 上个工作日是什么意思?星期五?星期天?
  • 周一至周五最后一天。
  • 对不起,可能是我,但我不明白:D 最后是什么?月,年?
  • 给定一个日期,我需要找到最后一个工作日。 IE。如果是周日,那么周五,如果是周三,那么周二,如果是周一,那么周五。
  • @JaviTorre,那么效率并不重要,因此您可以牺牲它来换取可读性和清晰的意图。我认为您的解决方案很明确。 Bas Swinckels 的回答更优雅一些。 duplicate 中的查找表方法是最有效的,但有点神奇,不多,很明显发生了什么,但它确实为效率牺牲了一点清晰度。

标签: python datetime


【解决方案1】:

这样的事情可能会起作用(未经测试):

from datetime import date, timedelta
b = date.today() - timedelta(days=1)

current_day = b.weekday()  # 0 for Monday, 6 for Sunday

# go back 1 day for Sat, 2 days for Sun, 0 for other days
days_to_go_back = max(current_day - 4, 0)  

b -= timedelta(days=days_to_go_back)

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2011-10-15
    相关资源
    最近更新 更多