上班时间
所谓上班时间是指从上班到下班的时间里,能够被算作工时的那部分时间总和。
算法
从上班到下班之间至少有一个时间段是不算工作时间的,即中午的休息时间,一般是12:00-14:00,如果晚上有加班,则傍晚的16:00-19:00也不算工作时间。
而上班时间可以从一天之中的任何时段开始,需要根据不同的上下班情况来累积上班时间。
设定A为按起始顺序排序的、且任意两个区间没有时间交集的非工作时间段列表
设start,end分别为上下班的时间(以分钟为单位),则计算上下班的算法如下:
# 通过遍历跳过非工作时间进行工作时间的累加
calculate(A,start,end):
if end < start:
# 如果是次日凌晨下班,则需要调整分钟时间
end = end + 24*60
sum = 0
error = False
completed = False
for rangeTime in A:
rangeStart,rangeEnd = rangeTime
# validate
if rangeEnd < rangeStart:
error = True
break
if start >= rangeStart:
if end <= rangeEnd:
# 没有更多有效区间
completed = True
break
if start < rangeEnd:
start = rangeEnd
continue
if end <= rangeStart:
sum = sum + end - start
completed = True
break
sum += rangeStart - start
start = rangeEnd
if start >= end:
completed = True
break
if not error:
if not completed and end >= start:
sum = sum + end - start
return sum
return -1