C#-如何检查第一段时间是否在第二段时间内


//first period start
DateTime FirstStart = new DateTime(2021,10,20);
DateTime FirstStop = new DateTime(2021,10,22);
//first period ends
//second period start
DateTime SecondStart = new DateTime(2021,10,21);
DateTime SecondStop = new DateTime(2021,10,23);
//second period stop

我需要检查是否可以添加第二个周期,但条件是不能在第一个周期。

public bool IsAvailable(Vechile vechile, DateTime RentFrom, DateTime RentTo)
{
if (vechile.Calendar.Any(x => (x.To >= RentFrom) && (x.From <= RentTo)))
{
return false;
}

如果您将这些时间段用于多种目的,我的建议是使用适当的方法为其创建一个类。

class Period // TODO invent proper name. Era?
{
public DateTime Start {get; set;}
public Datetime End {get; set;}
public TimeSpan Length => this.Stop - this.Start;
public bool IsIn (DateTime date)
{
return this.Start <= date && this.End >= date;
}
public bool OverLaps (Period period)
{
return period.Start < this.End && period.End > this.Start;
}
}

通过将其作为一门课程,将更容易理解发生了什么。将Period重新用于其他目的会更容易,因为一旦您有了Period,您就有了实现此目的所需的所有方法。

你将为未来的变化做好准备。例如,如果您想将Period更改为Start和Length,而不是Start和End,则更改将是最小的,尤其是对于您类的用户。

如果您缺少一个方法,例如,如果您想缩短或延长一个Period,或将两个Period合并,则更改将仅在此类中。

如果周期A不完全在B之后,也不完全在B之前,则周期A与周期B重叠,因此其一部分应在周期B结束之前,而其一部分则应在周期开始之后。

考虑添加从<=开始的检查终止也许让类不可变是个好主意。是否也需要合并和减去周期的方法?

最新更新