2012-01-20 10 views
52

Witam wszystkich Obecnie pracuję nad projektem, w którym po wystąpieniu określonego zdarzenia szczegóły dotyczące zdarzenia, w tym czas wystąpienia zdarzenia, zostaną dodane do tablicy list.Sprawdź różnicę w sekundach między dwoma razy

Po zakończeniu tej metody przekazuję listę do innej metody, która sprawdza jej wartości. Zanim przejdę przez pętlę, sprawdzam aktualny czas mojego komputera i muszę sprawdzić, czy różnica między czasem zapisanym w tablicy list a bieżącym czasem jest większa niż 5 sekund.

Jak mam to zrobić?

Odpowiedz

159

Zakładając dateTime1 i dateTime2DateTime wartości:

var diffInSeconds = (dateTime1 - dateTime2).TotalSeconds; 

W twoim przypadku, to byłyby używać DateTime.Now jako jedną z wartości i czasu na liście jako drugi. Uważaj na zamówienie, ponieważ wynik może być ujemny, jeśli dateTime1 jest wcześniejszy niż dateTime2.

+1

Dzięki, nawiasem mówiąc, var będzie skończyć się podwójnie: [totalseconds ] (https://msdn.microsoft.com/en-us/library/system.timespan.totalseconds (v = vs.110) .aspx) – Loaderon

+0

Dzięki ... Właśnie zostałem ukąszony przez użycie (Milliseconds) przez błąd, kiedy powinienem naprawdę używać (TotalMilliseconds) ... ouch. –

11

DateTime ma Subtract method oraz overloaded - operator dla właśnie takiej okazji:

DateTime now = DateTime.UtcNow; 
TimeSpan difference = now.Subtract(otherTime); // could also write `now - otherTime` 
if (difference.TotalSeconds > 5) { ... } 
3

Używam tego uniknąć interwał negatywny.

var seconds = (date1< date2)? (date2- date1).TotalSeconds: (date1 - date2).TotalSeconds; 
7

Wersja ta zawsze zwraca liczbę różnicy sekundy jako liczbę dodatnią (taki sam wynik jak na @ freedeveloper roztwór):

var seconds = System.Math.Abs((date1 - date2).TotalSeconds); 
Powiązane problemy