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;
}
/// 时间交叉校验
/// </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;
}