给定多个时间范围,我需要找出当前时间属于哪个时间范围。如何更有效地忽略DateTime的日期部分。
TimeSlot.Overlaps(DateTime currTime)
方法应忽略日期部分,并仅匹配时间部分。
答案 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类中的开始和结束日期时间(我猜是自定义的?)