2010-12-07 9 views
1

여러 시간 범위가 주어지면 현재 시간이 속하는 시간 범위를 알아야합니다. 이 작업은 DateTime의 날짜 부분을 무시하고보다 효율적으로 수행 할 수 있습니다.시간 범위에서 겹침 찾기

TimeSlot.Overlaps(DateTime currTime) 메소드는 날짜 부분을 무시하고 시간 부분 만 일치시켜야합니다.

+0

"시간 범위"는 http://msdn.microsoft.com이 아닌 것처럼 들립니다. com/ko-ko/library/system.timespan.aspx는 무엇입니까? 그렇지 않다면 무엇입니까? 'TimeSlot'이란 무엇입니까? –

+1

TimeSlot은 StartTime 및 EndTime 속성이있는 사용자 지정 클래스입니다. – Faisal

답변

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

.Net에서 datediff 메서드를 사용합니다. 간격으로 사용할 날짜의 부분을 지정할 수 있습니다. 그래서, 먼저 당신은 아마 그들이 같은 날 안에 있는지 테스트하기를 원할 것입니다. 요일을 간격으로 지정하십시오. 결과는 0이어야합니다. 그런 다음 시간, 분, 초 등을 찾을 수 있습니다. 1 시간 45 분 대 1.75 시간 105 분의 분수 부분을 제공합니다. 그런 다음 TimeSlot 클래스의 시작 및 종료 데이터 시간을 비교하십시오. (사용자 정의라고 생각하십니까?)