获取两个日期范围列表范围之间的日期范围列表

时间:2016-11-15 17:11:13

标签: c# performance datetime date-comparison

鉴于我有一个KeyValuePair<DateTime,DateTime>列表(代表可用的日期范围),我有另一个相同类型的列表(代表不可用的日期范围),那么我需要最后得到一个日期列表范围在第一个列表的范围内,但第一个列表中的范围按第二个列表中的范围切片。可能是第二个列表只有一个条目,但它涵盖了整个可用范围,在这种情况下结果应为空。

举例说明:

available: |~|   |~~~~|   |~~|      |~~~~~~~~~~~~~~~~~~~~~|
unavailab:   |~~~~~~~~~| |~|   |~~~~~~|       |~~~~~~~~|
expected : |~|             |~|        |~~~~~~~|        |~~|

或者,在代码中,如果您愿意(与插图不同):

IList<KeyValuePair<DateTime, DateTime>> scheduleDates = new List<KeyValuePair<DateTime, DateTime>>()
        {
            new KeyValuePair<DateTime, DateTime>(new DateTime(2016, 11, 15, 9, 0, 0), new DateTime(2016, 11, 15, 12, 0, 0)),
            new KeyValuePair<DateTime, DateTime>(new DateTime(2016, 11, 15, 15, 0, 0), new DateTime(2016, 11, 15, 21, 0, 0))
        };

IList<KeyValuePair<DateTime, DateTime>> holidayDates = new List<KeyValuePair<DateTime, DateTime>>()
        {
            new KeyValuePair<DateTime, DateTime>(new DateTime(2016, 11, 15, 11, 0, 0), new DateTime(2016, 11, 15, 16, 0, 0)),
            new KeyValuePair<DateTime, DateTime>(new DateTime(2016, 11, 15, 17, 0, 0), new DateTime(2016, 11, 15, 18, 0, 0)),
            new KeyValuePair<DateTime, DateTime>(new DateTime(2016, 11, 15, 20, 0, 0), new DateTime(2016, 11, 15, 24, 0, 0)),
        };

IList<KeyValuePair<DateTime, DateTime>> availability = new List<KeyValuePair<DateTime, DateTime>>()
        {
            new KeyValuePair<DateTime, DateTime>(new DateTime(2016, 11, 15, 9, 0, 0), new DateTime(2016, 11, 15, 11, 0, 0)),
            new KeyValuePair<DateTime, DateTime>(new DateTime(2016, 11, 15, 16, 0, 0), new DateTime(2016, 11, 15, 17, 0, 0)),
            new KeyValuePair<DateTime, DateTime>(new DateTime(2016, 11, 15, 18, 0, 0), new DateTime(2016, 11, 15, 20, 0, 0))
        };

这样做最有效的方法是什么?我只能想到一个蛮力,当然这不是要走的路。请注意,输入列表和/或输出列表都可以为空。

0 个答案:

没有答案
相关问题