代码改变世界

c# 2个时间段交叉

2022-09-29 11:23  idea555  阅读(138)  评论(0)    收藏  举报
/// <summary>
        /// 时间交叉校验
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        private bool CheckDate(DateTime a, DateTime b, DateTime x, DateTime y)
        {
            //讨论取a[B,E]与b1[B,E]不重叠部分:
            //2.a)当 (a.E<=b1.B)||(b1.E<=a.B) 时,无重叠,保留原先的a
            //时间无重叠                 
            if ((b < x) || (y < a))
            {
                return false;
            }
            //2.b)否则有重叠,去掉原先的a;
            //当 (a.B<b1.B)&&(b1.B<=a.E) 时,留下左边非重复段 a1[a.B,b1.B]
            //当 (a.B<=b1.E)&&(b1.E<a.E) 时,留下右边非重复段 a2[b1.E,a.E]
            //重叠
            if ((a < x) && (x <= b))
            {
                return true;
            }
            if ((a <= y) && (y < b))
            {
                return true;
            }
            if ((a < y) && (b == x))
            {
                return true;
            }
            return false;
        }