c# 怎么判断时间范围是否在另一个时间范围?
如,我现在数字有一个范围<time,time>,他们分别是10:00-13:00,15-20:00,23:00-3:00现在我需要加入一个时间范围,22:00-2:00,...
如,我现在数字有一个范围<time,time>, 他们分别是10:00-13:00,15-20:00,23:00-3:00
现在我需要加入一个时间范围,22:00-2:00,这时候他其中的23:00-2:00范围是在23:00-3:00的范围的,故不允许加入,请问这算法的代码改如何写? 展开
现在我需要加入一个时间范围,22:00-2:00,这时候他其中的23:00-2:00范围是在23:00-3:00的范围的,故不允许加入,请问这算法的代码改如何写? 展开
2个回答
展开全部
//先声明一个类型用于保存一个时间段,及一些基本操作方法
public struct TimeScope
{
public TimeScope(TimeSpan start, TimeSpan end)
{
if (end > start)
{
Start = start;
End = end;
}
else
throw new ArgumentOutOfRangeException("end值必须大于start值");
}
public readonly TimeSpan Start;
public readonly TimeSpan End;
/// <summary>
/// 判断时间段是否有交集
/// </summary>
public bool IntersectsWith(TimeScope other)
{
return !(other.End < Start || other.Start > End);
}
/// <summary>
/// 获取交叠的时间段,如没有交集则返回一个空的TimeScope。
/// </summary>
public TimeScope Intersect(TimeScope other)
{
if(IntersectsWith (other))
return new TimeScope( Start > other.Start ? Start : other.Start, End < other.End ? End : other.End );
else
return new TimeScope ();
}
/// <summary>
/// 判断是否为空值
/// </summary>
public bool IsEmpty
{
get {
var empty = new TimeSpan();
return Start == empty && End == empty;
}
}
public override string ToString()
{
return string.Format("{0}-{1}", Start, End);
}
}
//定义一个集合
List<TimeScope> list = new List<TimeScope>();
//操作如下:
//要添加的一个时间段
var a = new TimeScope(new TimeSpan(12, 30, 0), new TimeSpan(14, 0, 0));
//在列表中获取第一个有交集的时间段对象
var ts = list.FirstOrDefault(item => item.IntersectsWith(a));
if (ts.IsEmpty) //如果是空表示没有交集,可添加。
list.Add(a);
else
//如有交集,显示重叠的时间段。
MessageBox.Show(string.Format("{0}与{1}存在交集:{2}", a, ts, ts.Intersect(a)));
public struct TimeScope
{
public TimeScope(TimeSpan start, TimeSpan end)
{
if (end > start)
{
Start = start;
End = end;
}
else
throw new ArgumentOutOfRangeException("end值必须大于start值");
}
public readonly TimeSpan Start;
public readonly TimeSpan End;
/// <summary>
/// 判断时间段是否有交集
/// </summary>
public bool IntersectsWith(TimeScope other)
{
return !(other.End < Start || other.Start > End);
}
/// <summary>
/// 获取交叠的时间段,如没有交集则返回一个空的TimeScope。
/// </summary>
public TimeScope Intersect(TimeScope other)
{
if(IntersectsWith (other))
return new TimeScope( Start > other.Start ? Start : other.Start, End < other.End ? End : other.End );
else
return new TimeScope ();
}
/// <summary>
/// 判断是否为空值
/// </summary>
public bool IsEmpty
{
get {
var empty = new TimeSpan();
return Start == empty && End == empty;
}
}
public override string ToString()
{
return string.Format("{0}-{1}", Start, End);
}
}
//定义一个集合
List<TimeScope> list = new List<TimeScope>();
//操作如下:
//要添加的一个时间段
var a = new TimeScope(new TimeSpan(12, 30, 0), new TimeSpan(14, 0, 0));
//在列表中获取第一个有交集的时间段对象
var ts = list.FirstOrDefault(item => item.IntersectsWith(a));
if (ts.IsEmpty) //如果是空表示没有交集,可添加。
list.Add(a);
else
//如有交集,显示重叠的时间段。
MessageBox.Show(string.Format("{0}与{1}存在交集:{2}", a, ts, ts.Intersect(a)));
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询