【脚本】计算上班时间的算法

上班时间

所谓上班时间是指从上班到下班的时间里,能够被算作工时的那部分时间总和。

算法

从上班到下班之间至少有一个时间段是不算工作时间的,即中午的休息时间,一般是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值