繁体   English   中英

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

[英]C# - How to check if first period of time is during second period of time?

//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 期结束之前,部分应在期开始后。

考虑添加 Start <= End 的检查。 也许让类不可变是个好主意。 难道您还需要组合和减去句点的方法吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM