Нахождение перекрытий во временных диапазонах - PullRequest
1 голос
/ 07 декабря 2010

Учитывая несколько временных диапазонов, мне нужно выяснить, к какому временному диапазону относится текущее время.Как я могу сделать это более эффективно, игнорируя часть даты DateTime.

TimeSlot.Overlaps(DateTime currTime) метод должен игнорировать часть даты и совпадать только с частью времени.

Ответы [ 2 ]

2 голосов
/ 08 декабря 2010
public class TimeSlot
{
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }


    public bool Overlaps(DateTime compareTime)
    {
        return Overlaps(new TimeSlot() { StartTime = compareTime, EndTime = compareTime });
    }

    public bool Overlaps(TimeSlot compareSlot)
    {
        return (
            (compareSlot.StartTime.TimeOfDay >= StartTime.TimeOfDay && compareSlot.StartTime.TimeOfDay < EndTime.TimeOfDay) ||
            (compareSlot.EndTime.TimeOfDay <= EndTime.TimeOfDay && compareSlot.EndTime.TimeOfDay > StartTime.TimeOfDay) ||
            (compareSlot.StartTime.TimeOfDay <= StartTime.TimeOfDay && compareSlot.EndTime.TimeOfDay >= EndTime.TimeOfDay)
        );
    }
}
0 голосов
/ 07 декабря 2010

Я бы использовал метод datediff в .Net. Вы можете указать, какую часть даты вы хотите использовать в качестве интервала. Итак, сначала вы, вероятно, хотите проверить, что они в течение одного дня. В качестве интервала укажите день. Результат должен быть нулевым. Тогда вы можете найти часы, минуты, секунды и т. Д. Я уверен, что это дает вам дробные части: 1 час, 45 минут против 1,75 часа 105 минут. Затем просто сравните начальное и конечное время в вашем классе TimeSlot (который, я полагаю, является обычным?)

...