今天,有人问了我一个有趣的问题,即以分钟为单位计算工作时间。
我根据使用库写了一个答案python-dateutil
from datetime import datetime
from dateutil.rrule import *
from dateutil.parser import parse
def worktime_count(start: datetime, end: datetime, unit=MINUTELY):
return len(
[
*rrule(
unit,
start,
until=end,
byweekday=range(0, 5),
byhour=range(9, 18),
wkst=MO
)
]
)
print(
worktime_count(
parse('2022-05-13 17:50:00'),
parse('2022-05-16 09:10:00')
)
)
# 21
print(
worktime_count(
parse('2022-05-13 17:50:00'),
parse('2022-05-13 18:00:00')
)
)
# 10
# Поэтому просто -1 к результату не катит
在我看来,答案应该是 20(我想你会同意我的)。
这就是为什么我删除了我的答案
如果我们使每秒生成时间点的频率然后列表的长度//60,
那么答案将是正确的。
from datetime import datetime
from dateutil.rrule import *
from dateutil.parser import parse
def worktime_count(start: datetime, end: datetime, unit=SECONDLY):
return len(
[
*rrule(
unit,
start,
until=end,
byweekday=range(0, 5),
byhour=range(9, 18),
wkst=MO
)
]
) // 60
print(
worktime_count(
parse('2022-05-13 17:50:00'),
parse('2022-05-16 09:10:00')
)
)
# 20
print(
worktime_count(
parse('2022-05-13 17:50:00'),
parse('2022-05-13 18:00:00')
)
)
# 10
也许有人知道如何以每分钟的频率获得正确的结果?
以防万一链接到文档
@Sergey,谢谢你的想法。
如果它在工作时间范围内,则任务减少到不拾取最后一个元素。为此,在应用结束日期参数之前,我们将其减少一分钟