的时间段库.NEThttp://www.codeproject.com/KB/datetime/TimePeriod.aspx包括TimePeriodIntersector搜索重叠的时间段。
通过对时间线上的所有时刻进行计数/排序,使用线性快速算法计算重叠。
而且TimePeriodIntersector的用法是这样的:
// ----------------------------------------------------------------------
public void TimePeriodCombinerSample()
{
TimePeriodCollection periods = new TimePeriodCollection();
periods.Add(new TimeRange(new DateTime(2011, 3, 01), new DateTime(2011, 3, 10)));
periods.Add(new TimeRange(new DateTime(2011, 3, 04), new DateTime(2011, 3, 08)));
periods.Add(new TimeRange(new DateTime(2011, 3, 15), new DateTime(2011, 3, 18)));
periods.Add(new TimeRange(new DateTime(2011, 3, 18), new DateTime(2011, 3, 22)));
periods.Add(new TimeRange(new DateTime(2011, 3, 20), new DateTime(2011, 3, 24)));
periods.Add(new TimeRange(new DateTime(2011, 3, 26), new DateTime(2011, 3, 30)));
TimePeriodCombiner<TimeRange> periodCombiner = new TimePeriodCombiner<TimeRange>();
ITimePeriodCollection combinedPeriods = periodCombiner.CombinePeriods(periods);
foreach (ITimePeriod combinedPeriod in combinedPeriods)
{
Console.WriteLine("Combined Period: " + combinedPeriod);
}
// > Combined Period: 01.03.2011 - 10.03.2011 | 9.00:00
// > Combined Period: 15.03.2011 - 24.03.2011 | 9.00:00
// > Combined Period: 26.03.2011 - 30.03.2011 | 4.00:00
} // TimePeriodCombinerSample
我不认为我得到它。如果event1与event2重叠且event2与event3重叠,它们是否应该全部进入相同的子列表中,即使event1可能不与event3重叠? – Jan 2011-03-06 14:48:05
不可以。我们的目标是让列表形成,使任何人都无法参加任何给定列表中的两个事件。如果event1与event2和event3重叠,但event2和event3不重叠,则可以同时参加event2和event3。我将根据这些清单安排其他活动,如果涉及的两个每周活动也重叠,则新活动的时间只能重叠(从而防止任何人同时参与)。 谢谢你的时间! – 2011-03-06 16:50:20