首页 > 解决方案 > 如果它们以任何方式交叉,则比较两个 DateTime .TimeOfDay。ASP C#

问题描述

在考虑了大约两个小时之后,我希望你们能帮助我解决这个问题。

我要构建的是一个类似日历的系统,如果另一个条目落在或穿过同一个.TimeOfDay,用户将无法添加条目。

所以我想比较两个日期(DateTime)更具体地说:日期相同只是不同.TimeofDay

例子:

(Existing entry)
DateTime dateStart:    05/05/2021 17:00
DateTime  dateEnd:     05/05/2021 18:00

(User wants to add this:)
DateTime  compareStart:  05/05/2021 16:30
DateTime  compareEnd:    05/05/2021 17:15

我想要归档的是比较 compareStart + compareEnd 是否以任何可能的方式跨越 dateStart 和 dateEnd 。

边注:

compareStart 可能是 05/05/2021 17:25, compareEnd 可能是 05/05/2021 18:30 等。

只有在没有任何下降或跨越现有条目的情况下才能添加条目。我希望我已经清楚地描述了我的问题。

欢迎任何建议

提前致谢!

标签: c#datetimeasp.net-core

解决方案


可能会发生四种不同的重叠情况(请原谅我的绘画技巧)

他们四个都有以下共同点:

Existing.StartDate <= New.EndDateDateExisting.EndDate >= New.StartDate

在此处输入图像描述

简化类:

public class Event
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}

比较了两个事件

bool isOverlapping = e1.StartDate <= e2.EndDate && e1.EndDate >= e2.StartDate;

或在现实世界示例的方法中,例如在插入之前将现有事件列表与新事件进行比较的日历

public boolAddEvent(List<Event> events, Event newEvent)
{
    if (!events.Any(x => x.StartDate <= newEvent.EndDate && x.EndDateDate >= newEvent.StartDate))
    {
        events.Add(newEvent);
        return true
    }
    else
    {
        return false;
    }
}

推荐阅读