/// <summary> /// 获取两个时间段的重复部分 /// </summary> /// <param name="startTime1">时间段1 开始</param> /// <param name="endTime1">时间段1 结束</param> /// <param name="startTime2">时间段2 开始</param> /// <param name="endTime2">时间段2 结束</param> public TimeSpan GetDataOverid(DateTime startTime1, DateTime endTime1, DateTime startTime2, DateTime endTime2) { TimeSpan RtnTs = new TimeSpan(); ///重叠部分开始 DateTime OverlapBegin; //重叠部分结束 DateTime OverlapEnd; try { //情况一 // |-----------startTime1-----endTime1-----------| // |--------startTime2-----endTime2-------| if (startTime1 <= startTime2 && endTime1 >= endTime2) { OverlapBegin = startTime2; OverlapEnd = endTime2; RtnTs = endTime2 - startTime2; } //情况二 // |--------------startTime2-----endTime2----------------| // |-----------startTime1-----endTime1-----------| else if (startTime1 >= startTime2 && endTime1 <= endTime2) { OverlapBegin = startTime1; OverlapEnd = endTime1; RtnTs = endTime1 - startTime1; } //情况三 // |--------------startTime2-----endTime2----------------| // |-----------startTime1-----endTime1----------------------| else if ((startTime2 <= startTime1 && startTime1 <= endTime2) && endTime1 >= endTime2) { OverlapBegin = startTime1; OverlapEnd = endTime2; RtnTs = endTime2 - startTime1; } //情况四 // |--------------startTime1-----endTime1----------------| // |-----------startTime2-----endTime2----------------------| else if ((startTime1 <= startTime2 && startTime2 <= endTime1) && endTime2 >= endTime1) { OverlapBegin = startTime2; OverlapEnd = endTime1; RtnTs = endTime1 - startTime2; } } catch (Exception) { throw; } return RtnTs; }