2012-12-27 5 views
0

내 C# 코드에서 DateTime.Now을 사용하여 시간을 얻습니다. 그러나 이제 어떻게 두 개의 날짜 객체 사이의 차이를 초 단위로 정수 값으로 얻을 수 있습니까?시간의 차이를 초 단위로 확인하는 방법은 무엇입니까?

+3

있다는 사실을 숙지'의 정밀도 DateTime'은 약 16ms입니다. 따라서 +/- 32ms의 시간이 지나치게 길면'DateTime'을 사용하지 않아도됩니다.'StopWatch'를 사용해야합니다. (그럼에도 불구하고'StopWatch'를 사용해야합니다.) – Servy

+0

예 지금 스톱워치를 사용 중입니다. – omega

답변

4

당신이 StopWatch 객체를 사용하여 생각이 있으? 당신이 원하는 경우,

int seconds = watch.ElapsedMilliseconds/1000; 

아니면 TimeSpan 개체 :

using System.Diagnostics; 

Stopwatch watch = Stopwatch.StartNew(); 

// execute some code here.... 

parserWatch.Stop(); 

그리고 당신은이 같은 초를 얻을 수 있습니다

TimeSpan time = watch.Elapsed; 
+0

곱하기가 아닌 1000으로 나눕니다. –

+0

죄송합니다. @jeremyRoman, 당신은 절대적으로 맞습니다 :) –

+0

감사합니다 이것은 좋은 해결책입니다. – omega

11
long seconds = (long)(then - now).TotalSeconds; 

감산 두 DateTime들과 부동 소수점 TotalSeconds 속성 (0과 60 사이) 정수 Seconds 속성을 갖는 TimeSpan 객체를 리턴한다.

+0

나는 그의 애플리케이션이'Int32.MaxValue' _seconds_ 이상으로 실행될 수 있다는 생각을 정말 좋아한다. 그래서'long'을 더 잘 사용한다. 더 이상의 유닉스 시간 오버플로 문제! –

3

Subtract 방법을 사용하는 또 다른 방법 :

double second = then.Subtract(now).TotalSeconds; 
3
double starttime = Environment.TickCount; 
    // do sth 
double endtime = Environment.TickCount; 
double millisecs = endtime - starttime; // this is in milliseconds. 
double seconds = (millisecs/1000);   // this is in seconds. 
+0

'TickCount'가 오버 플로우 될 수 있습니다. 컴퓨터가 다시 시작되지 않으면 49.7 일 (또는 1.63 개월)마다 한 번 수행되므로,'/ do sth '중에 우연히 오버플로가 발생하면 바보 같은 결과가납니다. –

관련 문제