繁体   English   中英

从日期列表返回相交日期范围

[英]Return Intersected Date Range from a List of Dates

我有一个Calendar对象列表,其中包含ParentId,StartDate和EndDate,它们表示轮班休息。 某个区域随时可能有许多轮班,每个轮班都有不同的休息时间。

我需要获得它们相交的日期范围,以便可以确定每个区域当前何时没有人在工作。

例如,如果我有以下轮班休息时间:

new Calendar { ParentId = 1, StartDate = 2017-06-18 11:50:00, EndDate = 2017-06-18 12:20:00 };
new Calendar { ParentId = 2, StartDate = 2017-06-18 12:10:00, EndDate = 2017-06-18 12:40:00 };    
new Calendar { ParentId = 3, StartDate = 2017-06-18 12:15:00, EndDate = 2017-06-18 12:45:00 };

那么我需要返回的路口时间是12:15:00-12:20:00,因为那是该地区唯一没有人出现的时间。

我已经尝试过.NET库的时间段,但是那只能告诉我交集存在,而不是交集的范围是多少。

只是要清楚一点,我不想知道交叉点或重叠点是否存在,我需要知道它们发生的范围。

在此处输入图片说明

这对我有用:

var cals = new []
{
    new { ParentId = 1, StartDate = DateTime.Parse("2017-06-18 11:50:00"), EndDate = DateTime.Parse("2017-06-18 12:20:00") },
    new { ParentId = 2, StartDate = DateTime.Parse("2017-06-18 12:10:00"), EndDate = DateTime.Parse("2017-06-18 12:40:00") },
    new { ParentId = 3, StartDate = DateTime.Parse("2017-06-18 12:15:00"), EndDate = DateTime.Parse("2017-06-18 12:45:00") },
};

var intersection =
    cals
        .Aggregate((c0, c1) => new
        {
            ParentId = -1,
            StartDate = c0.StartDate > c1.StartDate ? c0.StartDate : c1.StartDate,
            EndDate = c0.EndDate < c1.EndDate ? c0.EndDate : c1.EndDate
        });

它给了我:

路口

暂无
暂无

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

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