先求AB并集,再求补集
循环AB并集求补集

解决方案 »

  1.   

    如果确定,A和B没有交集,可能这么做:
    1.从原集合中去掉A集合占用的区间:
     a.如果A的开始时间晚于原集合开始时间:添加区间原集合开始时间-A集合开始时间到集合C
     b.如果A的结束时间早于原集合结束时间:添加区间A集合结束时间-原集合结束时间到集合C
    2.从C集合去掉B集合占用的区间:
     a.判断B集合是否属于C集合的某个子区间,属于则从该子区间中去掉B集合占用的区间,方法同1(可递归实现).
      

  2.   

    时间排序
    自定义实体类,通过 LINQ的Intersect(交集),Except(差集)计算
      

  3.   


    开始和结束时间为
    StartDay和EndDay
    已经占用的时间段是hasUsedStartDay和hasUsedEndDay
    预留的时间段是ReserveStartDay和ReserveEndDay你要的结果就是:
    1、先排除占用时间段,剩下的实际时间就是:StartDay-hasUsedStartDay:EndDay-hasUsedEndDay
    2、再去掉预留的时间段,剩下的就是你要的结果:
    if(ReserveStartDay>hasUsedStartDay && hasUsedStartDay<hasUsedEndDay)
       StartDay-hasUsedStartDay:EndDay-ReserveStartDay
    else
       StartDay-ReserveStartDay:EndDay-hasUsedEndDay
    else
       tartDay-hasUsedStartDay:EndDay-ReserveStartDay没有其他的判断方法,只能去计算!