Jak uzyskać różnicę czasu między dwoma obiektami DateTime przy użyciu C #?

159

Jak uzyskać różnicę czasu między dwoma DateTimeobiektami przy użyciu języka C #?

TinTin
źródło

Odpowiedzi:

227

Poniższy przykład ilustruje, jak to zrobić:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

Po wykonaniu wypisuje "30", ponieważ istnieje 30-minutowa różnica między datą / godziną.

Wynikiem DateTime.Subtract(DateTime x)jest obiekt TimeSpan, który daje inne przydatne właściwości.

Daniel Renshaw
źródło
5
Aby wyświetlić różnicę, coś jak to zrobić: Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Zobacz: Niestandardowy format MSDN TimeSpan
ishmael
To zadziałało dla mnie. Chciałem tylko określić, ile sekund zajmie klientowi wykonanie połączenia REST i otrzymanie odpowiedzi.
Ziggler
1
Zwróć uwagę na użycie TotalMinutes! (nie Minutes)
Shahar Shokrani
64

Chcesz TimeSpanstruktury:

TimeSpan diff = dateTime1 - dateTime2;

Obiekt TimeSpan reprezentuje przedział czasu (czas trwania lub czas, który upłynął), który jest mierzony jako dodatnia lub ujemna liczba dni, godzin, minut, sekund i ułamków sekundy. Struktury TimeSpan można również użyć do reprezentowania pory dnia, ale tylko wtedy, gdy czas nie jest powiązany z określoną datą.

Istnieją różne metody odzyskiwania dni, godzin, minut, sekund i milisekund z tej struktury.

Jeśli interesuje Cię tylko różnica, to:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

da ci dodatnią różnicę między czasami niezależnie od zamówienia.

Jeśli masz właśnie składnik czasu, ale czasy mogą być podzielone o północy, musisz dodać 24 godziny do zakresu, aby uzyskać rzeczywistą różnicę:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}
ChrisF
źródło
Cześć, jeśli datetime2 to 09:00, a dateTime1 to 18:00, to diff to 09Hours 00 min. to jakie jest równanie dla datetime2 to 21:00, a dateTime1 to 03:00, to różnica jest ujemna i błędna. Jak to rozwiązać?
Pranesh Janarthanan
@Pranesh - jeśli obiekty zawierają datę, nie powinno być problemu. Jeśli nie zawierają czasu, weź bezwzględną różnicę lub dodaj 24 godziny do przedziału czasu, aby uzyskać dodatnią różnicę. To, które jest poprawne, zależy od twojej aplikacji.
ChrisF
Tak, już usunąłem te komentarze! czy możesz pokazać mi przykład kodu do wyjaśnienia twojego?
Pranesh Janarthanan
30

Potrzebne jest użycie metody Subtract klas DateTime , która zwraca TimeSpan .

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));
Nate
źródło
10

Sposób, w jaki zwykle to robię, to odejmowanie dwóch DateTime, a to daje mi TimeSpan, który pokaże mi różnicę.

Oto przykład:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
Darik
źródło
4

JEŚLI obie są wartościami daty i czasu UTC, które możesz zrobić TimeSpan diff = dateTime1 - dateTime2;

W przeciwnym razie szansa na uzyskanie poprawnej odpowiedzi w każdym możliwym przypadku wynosi zero.

Ian Mercer
źródło
3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);
Mukund
źródło
2

Musisz użyć TimeSpan . Oto przykładowy kod:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
Jason Webb
źródło
2
Albo po prostuTimeSpan sincelast = DateTime.Now - LastUpdate;
Ben M.
2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}
Wong Lok Pan
źródło
2

Możesz użyć w następujący sposób, aby uzyskać różnicę między dwoma obiektami daty i godziny. Załóżmy, że istnieją obiekty DateTime dt1 i dt2, a następnie kod.

TimeSpan diff = dt2.Subtract(dt1);
Sunny Sandeep
źródło