C# 在DateTime';It’都在同一天,但时间不同

C# 在DateTime';It’都在同一天,但时间不同,c#,list,datetime,time,C#,List,Datetime,Time,我想知道是否有人能帮我,我只是在学习c#,我正试图在同一天但在不同时间的开始和结束日期时间列表中找到所有的间隔(不在列表中的已用时间或当天的空闲时间)。我可以得到第一个和最后一个,但不是中间的差距。任何帮助都将不胜感激 public class DatetimeRange { public DateTime Start { get; set; } public DateTime End { get; set; }

我想知道是否有人能帮我,我只是在学习c#,我正试图在同一天但在不同时间的开始和结束日期时间列表中找到所有的间隔(不在列表中的已用时间或当天的空闲时间)。我可以得到第一个和最后一个,但不是中间的差距。任何帮助都将不胜感激

        public class DatetimeRange
        {
            public DateTime Start { get; set; }
            public DateTime End { get; set; }
        }

        public static List<DatetimeRange> GetDateTimeGaps(List<DatetimeRange> datetimeRange, DateTime day)
        {
            var Result = new List<DatetimeRange>();

            var HighestValueOfDay = new DateTime(day.Year, day.Month, day.Day, 23, 59, 59);
            var LowestValueOfDay = new DateTime(day.Year, day.Month, day.Day, 00, 00, 00);

            var FirstStart = datetimeRange.Min(x => x.Start);
            var LastEnd = datetimeRange.Max(x => x.End);

            if (LowestValueOfDay < FirstStart)
                Result.Add(new DatetimeRange { Start = LowestValueOfDay, End = FirstStart });

            if (HighestValueOfDay > LastEnd)
                Result.Add(new DatetimeRange { Start = LastEnd, End = HighestValueOfDay });

            return Result;
        }

        static void Main()
        {
            var Datetimes = new List<DatetimeRange>
            {
                new DatetimeRange { Start = new DateTime(2020, 2, 26, 12, 00, 0), End = new DateTime(2020, 2, 26, 15, 30, 0)},
                new DatetimeRange { Start = new DateTime(2020, 2, 26, 8, 30, 0), End = new DateTime(2020, 2, 26, 10, 30, 0)}
            };

            var Result = GetDateTimeGaps(Datetimes, new DateTime(2020, 2, 26, 0, 0, 0));

            Console.ReadKey();
        }
公共类日期时间范围
{
公共日期时间开始{get;set;}
公共日期时间结束{get;set;}
}
公共静态列表GetDateTimeGaps(列表datetimeRange、DateTime day)
{
var Result=新列表();
var HighestValueOfDay=新日期时间(日.年,日.月,日.日,23,59,59);
var LowestValueOfDay=新的日期时间(日。年,日。月,日。日,00,00);
var FirstStart=datetimeRange.Min(x=>x.Start);
var LastEnd=datetimeRange.Max(x=>x.End);
if(日期的最低值<首次启动)
Add(新的日期时间范围{Start=lowerstvalueofday,End=FirstStart});
如果(日期的最高值>最后一天)
Add(新的日期时间范围{Start=LastEnd,End=HighestValueOfDay});
返回结果;
}
静态void Main()
{
var Datetimes=新列表
{
new DatetimeRange{Start=new DateTime(2020,2,26,12,00,0),End=new DateTime(2020,2,26,15,30,0)},
new DatetimeRange{Start=new DateTime(2020,2,26,8,30,0),End=new DateTime(2020,2,26,10,30,0)}
};
var Result=GetDateTimeGaps(日期时间,新日期时间(2020,2,26,0,0,0));
Console.ReadKey();
}

所谓间隙,我指的是列表中未包含的经过时间。对不起,我的解释不正确clear@ShadowMonkey我认为您需要定义GetDateTimeGaps上的参数。猜测可能是day参数指定了一天,datetimeRange参数指定了该天内的时间,而您试图做的是提取另一个datetimeRange列表,该列表是指定日期内datetimeRange未涵盖的时间?这可能会有所帮助。。。Yes@Mick I am,提取另一个DatetimeRange列表,该列表是指定日期内DatetimeRange未涵盖的时间