【问题标题】:How to get the number of weekdays, that have passed since epoch?如何获得自纪元以来已经过去的工作日数?
【发布时间】:2021-12-07 08:29:29
【问题描述】:

使用如下所示的简单代码,您可以获得自纪元以来经过的天数。

from time import time
secs = time()
day = 24 * 60 * 60
days = int(secs // day)
print(days)

但是现在我需要防止所有的周六和周日都被计算在内。第一步是获取已过去的完整周数并将其乘以 5。

from time import time
secs = time()
week = 7 * 24 * 60 * 60
weekDays = int(secs // week)
weekDays *= 5
print(weekDays)

但我不知道,下一步该做什么。请注意,任务是查找已过去的 FULL 个工作日的数量,因此在第 1000th 个工作日,答案应该是 999。

另外,如果给定星期五的答案是 2000,那么星期六应该增加到 2001,因为现在我们还有一个完整的星期五,已经过去了。然后答案应该在周日和周一保持不变,但在周二增加到 2002 年,因为现在我们还有一个完整的周一,已经过去了。

我查了一下,1970 年 1 月 1 日(纪元日期)是星期四,所以我认为必须考虑到这一点。

我希望我能够简单而全面地解释我的问题。如果没有,请在 cmets 中询问。期待您的回答。提前致谢。

【问题讨论】:

标签: python time unix-timestamp


【解决方案1】:

从开始到结束日期迭代并过滤掉周六和周日:

from datetime import date, datetime, timedelta
def daterange(startDate, endDate, delta=timedelta(days=1)):
    currentDate = startDate
    while currentDate <= endDate:
        # Exclude weekends!
        if currentDate.isoweekday() < 6:
            yield 1
        currentDate += delta


_start = datetime(1995, 11, 5).date()
_end = datetime(1995, 11, 8).date()

print(f"Found {sum(daterange(_start, _end))} work days")

输出:

Found 3 work days

【讨论】:

  • 你在说什么?他们为你做了一个函数,它以 enddate 作为参数,所以现在你可以做 _end = datetime.date.today() 并且它会正常工作
猜你喜欢
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多