求两组时间是否交集,使用 24 小时制
例1: ta = "06:00-22:00";
tb = "08:00-09:00"; 此时 tb 被 ta 包含。例2:
ta = "08:00-01:00";
tb = "05:00-06:00"; 此时 tb 不被 ta 包含。 想了好久不知道程序应该怎么写,望各位大侠指点,感激不尽!
例1: ta = "06:00-22:00";
tb = "08:00-09:00"; 此时 tb 被 ta 包含。例2:
ta = "08:00-01:00";
tb = "05:00-06:00"; 此时 tb 不被 ta 包含。 想了好久不知道程序应该怎么写,望各位大侠指点,感激不尽!
{
//ta = "06:00-08:00";
//tb = "08:00-09:00"; string[] tempTime = ta.Split('-');
DateTime taStart = DateTime.Parse(tempTime[0]);
DateTime taEnd = DateTime.Parse(tempTime[1]);
tempTime = tb.Split('-');
DateTime tbStart = DateTime.Parse(tempTime[0]);
DateTime tbEnd = DateTime.Parse(tempTime[1]); if ( taStart <= tbStart && tbStart <= taEnd)
{
return true;
} if ( tbStart <= taStart && taStart <= tbEnd)
{
return true;
}
return false;
}
tb = "22:00-23:00";这样的怎么去比较呢?因为 ta 中的 00:00 是0,怎么与 tb 中的数比大小呢?
tb = "22:00-23:00";这种情况可以做出下处理:
如果00:00位于"-"号之右,替换为24:00,再进行比较,另外没必要转换为别的类型,就用string进行比较
{
string[] tas = ta.Split('-');
string[] tbs = tb.Split('-');
int taStart = int.Parse(tas[0].Replace(":", ""));
int taEnd = int.Parse(tas[1].Replace(":", ""));
int tbStart = int.Parse(tbs[0].Replace(":", ""));
int tbEnd = int.Parse(tbs[1].Replace(":", "")); if (taStart == 0 && taEnd == 2400) return true; if (taStart < taEnd) //A只有1段
{
if (tbStart < tbEnd) //B只有1段
{
if (taStart <= tbStart && taEnd >= tbEnd)
{
return true;
}
}
else //B两段
{
return false;
}
}
else if (taStart > taEnd) //A有2段
{
if (tbStart < tbEnd) //B只有1段
{
if (taStart <= tbStart || taEnd >= tbEnd)
{
return true;
}
else
{
return false;
}
}
else //B有两段
{
if (taStart <= tbStart && taEnd >= tbEnd)
{
return true;
}
else
{
return false;
}
}
}
return false;
}