/// <summary>
        /// 两个时间段,是否存在 时间上的重叠.
        /// </summary>
        /// <param name="trMain"> 时间段1 (算法中,把第一个参数的时间段,认为是已存在的数据) </param>
        /// <param name="trNew)"> 时间段2 (算法中,把第二个参数的时间段,认为是准备新增的数据) </param>
        /// <param name="straightFlag)"> 连续标志 (为 true 的时候, 10:00--12:00 与 12:00--14:00 认为是没有重叠的, 为 false 的时候,认为是在 12:00 上有重叠) </param>
        /// <returns></returns>
        public static bool IsExistsTimeRangeOverlap(TimeRange trMain, TimeRange trNew, bool straightFlag = true)
        {
            // 下面的注释中的字符说明:
            // - 表示 空白时间段
            // + 表示 开始/结束的 标志位.
            // = 表示 时间段范围内


            // 首先判断 第一种情况.
            // 时间段1:----------+=====+-----
            // 时间段2:--------+====+--------
            // 或者
            // 时间段1:----------+=====+-----
            // 时间段2:----------+====+--------
            // 或者
            // 时间段1:----------+=====+-----
            // 时间段2:--------+==========+--
            // 或者
            // 时间段1:----------+=====+-----
            // 时间段2:----------+==========+--

            if (trNew.StartTime <= trMain.StartTime
                && trNew.EndTime > trMain.StartTime)
            {
                // 有重叠.
                return true;
            }


            // 然后判断第二种情况.
            // 时间段1:------+=========+-----
            // 时间段2:--------+====+--------
            // 或者
            // 时间段1:------+=========+-----
            // 时间段2:------+====+--------
            // 或者
            // 时间段1:------+=========+-----
            // 时间段2:--------+==========+--
            // 或者
            // 时间段1:------+=========+-----
            // 时间段2:------+==========+--

            if (trNew.StartTime >= trMain.StartTime
                && trNew.StartTime < trMain.EndTime)
            {
                // 有重叠.
                return true;
            }



            // 最后判断连续的情况.
            // 第一种情况.
            // 时间段1:----------+=====+-------------
            // 时间段2:-----+====+--------

            if (trNew.StartTime <= trMain.StartTime
                && trNew.EndTime == trMain.StartTime
                && !straightFlag)
            {
                // 时间连续,但是不允许连续
                // 有重叠.
                return true;
            }

            // 第二种情况.
            // 时间段1:------+=========+-------------
            // 时间段2:----------------+====+--------

            if (trNew.StartTime >= trMain.StartTime
                && trNew.StartTime == trMain.EndTime
                && !straightFlag)
            {
                // 时间连续,但是不允许连续
                // 有重叠.
                return true;
            }


            // 如果执行到了这里,那么认为是 参数的2个时间段 没有重叠。
            return false;
        }
        public void IsExistsTimeRangeOverlapTestStraightFlag()
        {
            // 系统中已有的时间段为  10:00 -- 12:00
            TimeRange trMain = new TimeRange(1000, 1200);

            bool actual;


            // 首先 8:00 -- 9:00 与 主数据 不存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(800, 900));

            // 不存在时间重叠.
            Assert.IsFalse(actual);


            // 允许连续的情况下  8:00 -- 10:00 与 主数据 不存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(800, 1000));

            // 不存在时间重叠.
            Assert.IsFalse(actual);


            // 允许连续的情况下  12:00 -- 14:00 与 主数据 不存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(1200, 1400));

            // 不存在时间重叠.
            Assert.IsFalse(actual);


            // 13:00 -- 14:00 与 主数据 不存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(1300, 1400));

            // 不存在时间重叠.
            Assert.IsFalse(actual);




            //  9:00 -- 11:00 与 主数据 存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(900, 1100));

            // 存在时间重叠.
            Assert.IsTrue(actual);

            //  9:00 -- 12:00 与 主数据 存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(900, 1200));

            // 存在时间重叠.
            Assert.IsTrue(actual);

            //  9:00 -- 13:00 与 主数据 存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(900, 1300));

            // 存在时间重叠.
            Assert.IsTrue(actual);


            //  10:00 -- 11:00 与 主数据 存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(1000, 1100));

            // 存在时间重叠.
            Assert.IsTrue(actual);


            //  10:00 -- 12:00 与 主数据 存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(1000, 1200));

            // 存在时间重叠.
            Assert.IsTrue(actual);


            //  10:00 -- 13:00 与 主数据 存在时间重叠
            actual = TimeRangeOverlapChecker.IsExistsTimeRangeOverlap(
                trMain,
                new TimeRange(1000, 1300));

            // 存在时间重叠.
            Assert.IsTrue(actual);
        }