2013-02-11 7 views
1

이 문제를 해결하기위한 논리를 찾으려고했지만 멈추었습니다.겹친 시간과의 시간차를 계산하십시오.

내 데이터베이스에는 6 개의 날짜 열이 있습니다. 아래처럼

StartDate = {14/1/2012 11:00:00 AM} 
EndDate=  {14/1/2012 11:30:00 AM} 

**Break between start and End Date is 30 mins** 

StartDate2 = {14/1/2012 11:30:00 AM} 
EndDate2= {14/1/2012 12:30:00 PM} 

**Break between start1 and End1 Date is 1hr** 

StartDate3 = {14/1/2012 12:00:00 PM} 
EndDate3= {14/1/2012 01:30:00 PM} 
**Break between start2 and End2 Date is 1hr is 1hr** 

각 날짜 사이에 휴식 시간을 찾고 마지막을 요약하려고합니다. 예를 들어

: 시작과 종료 날짜 사이

StartDate = {14/1/2012 11:00:00 AM} 
EndDate=  {14/1/2012 11:30:00 AM} 

휴식은 30 분입니다.

하지만 시작 및 종료 날짜 2와 3을 본 경우 시간이 겹칩니다. 이 시나리오에서는 시간 간격이 얼마나 도움이되는지 확신 할 수 없습니다.

세 타임 스탬프 및 합계까지 사이의 총 휴식 2시간 30 분

어떤 사람이이 문제를 해결하기 위해 몇 가지 아이디어를 던져주세요한다. 사전에

감사

답변

3

시간 범위이 시나리오에서 도움이 될 것입니다 방법을 잘하지.

TimeSpan보다 늦은 시간 형식을 뺀 것이 음수 일 수 있습니다. 예를 들어,

var dt1 = DateTime.Parse("02/10/2013 12:20"); 
var dt2 = DateTime.Parse("02/10/2013 12:00"); 
Console.WriteLine(dt2.Subtract(dt1)); 

prints -00:20:00.

겹치기를 감지하기 위해 간격이 음수인지 확인할 수 있습니다. 한 가지 방법은 부정적 위해 Ticks 속성을 검사 할 일은 :

var dt1 = DateTime.Parse("02/10/2013 12:20"); 
var dt2 = DateTime.Parse("02/10/2013 12:00"); 
var diff = dt2.Subtract(dt1); 
if (diff.Ticks < 0) { 
    Console.WriteLine("An overlap is detected."); 
} 
+0

감사 dasblinkenlight 오전 잘못된 경우 정정 해줘, 그래서 모든 두 날짜 사이의 "틱"을 확인해야하고 부정적인가없는 경우 전 음수 값을 얻지 못하면 빼고 다시 더할 수 있습니다. 예를 들어 대한 – Usher

+0

: EndDate2 = {14/1/2012 오후 12시 30분 0초} StartDate3 = {14/1/2012 오후 12시 0분 0초} var에 DT1 = DateTime.Parse (EndDate2); var dt2 = DateTime.Parse (StartDate3); var diff = dt2.Subtract (dt1); -30 분 - (최종 date3 StartDate3) 경우 (diff.Ticks는 <0) 지금 사이의 시간을 빼기 { 여기에 의미 -30 차이를받을}. 그 논리가 의미가 있습니까? – Usher

+1

@Usher, 시작 날짜가 종료 날짜보다 늦은 지 확인하려면'if (startDate> endDate)'를 사용하면됩니다. 그 차이를 계산하고 그 postive/부정적인 기호를 확인하는 것이 더 의미있을 수 있습니다. –

관련 문제