找到时间范围的重叠

时间:2010-12-07 15:01:01

标签: .net facebook-c#-sdk

给定多个时间范围,我需要找出当前时间属于哪个时间范围。如何更有效地忽略DateTime的日期部分。

TimeSlot.Overlaps(DateTime currTime)方法应忽略日期部分,并仅匹配时间部分。

2 个答案:

答案 0 :(得分:2)

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)
        );
    }
}

答案 1 :(得分:0)

我会在.Net中使用datediff方法。您可以指定希望将日期的哪一部分用作间隔。所以,首先你可能想测试它们是否在同一天内。将日期指定为间隔。结果应为零。然后你可以找到小时,分钟,秒等。我很确定它会给你分数部分:1小时45分钟而不是1.75小时105分钟。然后只比较TimeSlot类中的开始和结束日期时间(我猜是自定义的?)