2011-02-24 4 views
2

나는 로그 시간이 있습니다. 로그에 한 열을 하나의 로그인 시간 동안 그리고 그 다음에는 전체 로그에 대한 그 사람의 총 로그인 시간이되도록하고 싶습니다. 나는 시간 범위 객체를 사용하여 첫 번째 시간을지고있어,하지만 난 휘젓다 동안 지속적으로 결과 집합을 통해 총 시간을 추가C# DateTime TimeSpan 기간?

나를 벗어났습니다있다 : 나는 다른 시간 범위를 가진 시도했습니다

// Set duration of this visit 
timeInRoom = -(ieLog.Ingresstime - ieLog.Egresstime); 

변수에 마지막 반복 값을 저장하고 timeInRoom을 추가하여 실행 집계를 가질 수는 있지만 작동하지 않는 것 같습니다.

내가 잘못 생각한 것 같습니다. 어떤 아이디어? 시간은 결과 집합의 DateTime 값입니다.

감사합니다.

var timeInRoom = new TimeSpan(); 
foreach(var log in logs) 
{ 
    timeInRoom += log.Egresstime - log.IngressTime; 
} 

을 아니면 LINQ의 팬이라면 :이 같은

+0

어떻게 timespan 개체를 추가 하시겠습니까? – msarchet

+0

DateTime 객체를 추가하고 있는데, 그 결과 TimeSpan 객체가 생성되었습니다. – rd42

+0

DateTimes를 두 개 추가하지 마십시오. 아래 예제를 참조하여 직선으로 유지하십시오. –

답변

4

뭔가 작업을해야합니다 당신의 머리에서 별도의 날짜 시간 및 시간 범위 개념

logs.Aggregate(new TimeSpan(), 
       (ts, log) => ts + (log.Egresstime - log.IngressTime)); 
+0

왜 TimeSpan timeInRoom 대신 var timeInRoom을 사용합니까? – rd42

+0

@ rd42 : 그것은 스타일의 문제 일뿐입니다. 누군가 그 라인을보고 즉시 timeInRoom이 TimeSpan이라는 것을 알 수 있습니다 (초기화 방법 때문에). 그래서 개발자의 혼란이별로 없습니다. 컴파일러는 정확히 같은 방식으로 처리합니다. 그래서 나는 헛된 반복 ('TimeSpan ... = new TimeSpan()')을 피하는 것을 선호한다. – StriplingWarrior

4

시도합니다. TimeSpans는 발생 또는 발생시기와 관계없이 고정 된 시간을 나타냅니다. 그것은 하나의 단위가있는 숫자 일뿐입니다. DateTime은 공간에 대한 고정 된 시간을 현재와 관련하여 명확한 값으로 나타냅니다. 예를 들어

는 :

DateTime now = DateTime.Now; 
DateTime tomorrow = now.AddDays(1); 
DateTime yesterday = now.AddDays(-1); 
DateTime nextWeek = now.Add(TimeSpan.FromDays(7)); 
DateTime dayAfterNext = now.Add(TimeSpan.FromDays(1) + TimeSpan.FromDays(1)); 

TimeSpan twoDays = TimeSpan.FromDays(1) + TimeSpan.FromDays(1); 
TimeSpan oneMinute = TimeSpan.FromMinutes(2) - TimeSpan.FromMinutes(1); 
DateTime oneMinuteFromNow = now.Add(oneMinute); 

StriplingWarrior @의 대답은 제대로 경과 시간의 누계를 유지하는 방법을 보여줍니다.

+0

설명 주셔서 감사합니다! – rd42