日期:2014-05-18  浏览次数:20384 次

判断一个时间范围与另一个时间范围是否有交集

1,
A,2005-3至2005-7
B,2005-5至2005-8
2,
A,2005-5至2005-8
B,2005-6至2005-7
3,
A,2005-5至2005-8
B,2005-8至2005-9
等等。。。
这些都是交集

时间范围B只能在时间范围A的两侧,不能有交集

请教下如何实现算法,谢谢了!


------解决方案--------------------
DateTime A,B,C,D;
A=DateTime.Parse("2005-5-1");
B=DateTime.Parse("2005-8-1");
C=DateTime.Parse("2005-8-1");
D=DateTime.Parse("2005-9-1");
TimeSpan T1=B-A;
TimeSpan T2=D-C;
TimeSpan T3=D-A;
if(T1.TotalMilliseconds+T2.TotalMilliseconds<T3.TotalMilliseconds)
{
Response.Write("无");
}
else
Response.Write("有");
------解决方案--------------------
前几天处理过一个类似的,稍改了下,试试

C# code
DateTime start1 = DateTime.Parse(TextBox1.Text);
DateTime end1 = DateTime.Parse(TextBox2.Text);
DateTime start2 = DateTime.Parse(TextBox3.Text);
DateTime end2 = DateTime.Parse(TextBox4.Text);

TimeSpan ts1 = start2 - start1;
TimeSpan ts2;
if (ts1.Ticks > 0)
{
    ts2 = start2 - end1;
    if (ts2.Ticks > 0)
        Response.Write("不相交");
    else
        Response.Write("相交");
}
else
{
    ts2 = start1 - end2;
    if (ts2.Ticks > 0)
        Response.Write("不相交");
    else
        Response.Write("相交");
}

------解决方案--------------------
if((B.Date1 >= A.Date1) && (B.Date1 <= A.Date1))
return 有交集
else
return 没有交集

------解决方案--------------------
B.DATE2<A.DATE1 或 B.DATE1>A.DATE2 即符合要求