【发布时间】:2020-07-16 08:50:27
【问题描述】:
我正在做一个约会查找器,您可以在其中输入多个用户的约会,它应该会在具有多个可变 DateRanges 的列表中找到空白。不幸的是,我写的方法不起作用。如果没有像 TimePeriodLibrary 这样的大型库,我怎么能做到这一点。
List<DateRange> appointments = new List<DateRange>();
appointments.Add(new DateRange(new DateTime(2020, 7, 6, 10, 30, 0), new DateTime(2020, 7, 6, 11, 30, 0)));
appointments.Add(new DateRange(new DateTime(2020, 7, 7, 8, 30, 0), new DateTime(2020, 7, 7, 15, 30, 0)));
appointments.Add(new DateRange(new DateTime(2020, 7, 6, 16, 30, 0), new DateTime(2020, 7, 6, 17, 0, 0)));
var gaps = FindGapsInUsersCalendars(appointments, 60);
if (gaps.Any())
{
foreach (var gap in gaps)
{
Console.WriteLine($"{gap.Start} - {gap.End}");
}
}
private static List<DateRange> FindGapsInUsersCalendars(List<DateRange> appointments, int minutes)
{
List<DateRange> possibilities = new List<DateRange>();
foreach (var appointment in appointments)
{
if (!DateRangeIncludesDateForMinutes(appointment, appointment.End, minutes)) continue;
possibilities.Add(new DateRange(appointment.Start, appointment.Start.AddMinutes(minutes)));
}
return possibilities;
}
private static bool DateRangeIncludesDateForMinutes(DateRange dateRange, DateTime date, int minutes)
{
var tempDate = date;
for (var i = 0; i < minutes; i++)
{
if (!dateRange.Includes(tempDate.AddMinutes(1))) {
return false;
}
}
return true;
}
DateRange.cs 类:
public class DateRange : IRange<DateTime>
{
public DateRange(DateTime start, DateTime end)
{
Start = start;
End = end;
}
public DateTime Start { get; private set; }
public DateTime End { get; private set; }
public bool Includes(DateTime value)
{
return (Start <= value) && (value <= End);
}
public bool Includes(IRange<DateTime> range)
{
return (Start <= range.Start) && (range.End <= End);
}
}
IRange.cs 接口:
public interface IRange<T>
{
T Start { get; }
T End { get; }
bool Includes(T value);
bool Includes(IRange<T> range);
}
【问题讨论】:
-
“不幸的是,我写的方法不起作用。”你希望他们做什么?他们在做什么呢?
-
@SomeBody 我希望
DateRangeIncludesDateForMinutes方法返回一个DateRange是否至少包含方法args 中的分钟值。FindGapsInUsersCalendars应该返回一个列表,其中包含未定义约会的所有间隙。 -
这能回答你的问题吗? Find gap between multiple dates in C#
-
@MaciejLos 不再,(我已经问过这个问题了)。不幸的是,我不能使用这个库。
标签: c# .net datetime math date-range