【问题标题】:Number of hours between two dates, excluding weekend两个日期之间的小时数,不包括周末
【发布时间】:2021-07-01 17:20:51
【问题描述】:

我想要提及日期之间的总小时数,不包括周末(周六、周日)。

```
start_time = datetime.datetime(2021, 7, 1, 22, 45, 25)
end_time = datetime.datetime(2021, 7, 15, 10, 00, 00)
```

【问题讨论】:

标签: python python-datetime


【解决方案1】:

我的回答需要一个额外的库 (NumPy)

关键要素:

  1. numpy.busday_count统计工作日数
  2. datetime.timedelta(1) 省略开始日期(通过 if-else 检查以计算分钟数)
  3. isoweekday() 返回 1 到 7 之间的值,1 代表星期一和 7 星期日

步骤:

  1. 跳过开始日和结束日,查找有效的中间日。乘以 24(每天的总小时数)
  2. 检查开始日是否为工作日并计算结束该日期剩余的总小时数
  3. 检查结束日是否为工作日并计算当天经过的总小时数
import datetime
import numpy as np

start_time = datetime.datetime(2021, 7, 1, 22, 45, 25)
end_time = datetime.datetime(2021, 7, 15, 10, 00, 00)
#Step 1.
total_hours=np.busday_count(start_time.date()+datetime.timedelta(1),end_time.date())*24 #already not counting last date
#Step2.
if start_time.isoweekday() in range(1, 6):
    total_hours=total_hours+24-start_time.hour-start_time.minute/60-start_time.second/3600
#Step 3.
if end_time.isoweekday() in range(1, 6):
    total_hours=total_hours+end_time.hour+end_time.minute/60+end_time.second/3600
print(total_hours)
output: 227.24305555555554

【讨论】:

    【解决方案2】:
    from BusinessHours import BusinessHours
    import datetime
    
    start_time = datetime.datetime(2021, 7, 1, 22, 45, 25)
    end_time = datetime.datetime(2021, 7, 15, 10, 00, 00)
    
    hours = BusinessHours(start_time, end_time, worktiming=[9, 18], weekends=[6, 7], holidayfile=None)
    print(hours.gethours())
    

    这对你有帮助,更多信息请参考 Python 中的 BusinessHours 模块!

    【讨论】:

      【解决方案3】:

      这样就可以了:

      busdays = np.busday_count(start_time.date(), end_time.date())
      

      【讨论】:

        猜你喜欢
        • 2019-12-10
        • 2020-11-26
        • 2019-04-15
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        相关资源
        最近更新 更多