首页 > 解决方案 > 时间间隔重叠但在第二天

问题描述

我正在尝试构建一个函数来告诉我 2 个时间范围是否重叠。到目前为止,我发现的所有现有解决方案都是关于检测重叠但在同一天,这对我没有好处。

我认为这样的事情会起作用,但它不能处理所有情况:

var current = new Day()
{
    Start = TimeSpan.Parse("23:00"),
    End = TimeSpan.Parse("02:00")
};

var next = new Day()
{
    Start = TimeSpan.Parse("22:45"),
    End = TimeSpan.Parse("23:30")
};

current.End = (current.Start > current.End) ? 
               current.End.Add(new TimeSpan(24, 0, 0)) : 
               current.End;

next.End = (next.Start > next.End) ? 
            next.End.Add(new TimeSpan(24, 0, 0)) : 
            next.End;

bool overlap = (current.Start < next.End && next.Start < current.End);

Debug.WriteLine(overlap);

提供方案按预期工作,但如果我尝试以下操作,它不起作用:

var current = new Day()
{
    Start = TimeSpan.Parse("23:00"),
    End = TimeSpan.Parse("02:00")
};

var next = new Day()
{
    Start = TimeSpan.Parse("01:00"),
    End = TimeSpan.Parse("04:00")
};

关于我可以用来处理所有场景的任何建议。它需要处理重叠,但它还需要处理任何时候结束时间小于开始时间,它会假设它是在第二天,重叠计算应该考虑到这一点。

谢谢。

标签: c#datetimetimespan

解决方案


推荐阅读