Wie erhalte ich mit C # den Zeitunterschied zwischen zwei DateTime-Objekten?

159

Wie erhalte ich DateTimemit C # den Zeitunterschied zwischen zwei Objekten?

TinTin
quelle

Antworten:

227

Das folgende Beispiel zeigt, wie das geht:

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);

Bei der Ausführung wird "30" ausgegeben, da zwischen Datum und Uhrzeit ein Unterschied von 30 Minuten besteht.

Das Ergebnis von DateTime.Subtract(DateTime x)ist ein TimeSpan-Objekt, das andere nützliche Eigenschaften bietet.

Daniel Renshaw
quelle
5
Gehen Sie wie folgt vor, um den Unterschied anzuzeigen : Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Siehe: MSDN Custom TimeSpan Format
ishmael
Das hat bei mir funktioniert. Ich wollte nur wissen, wie viele Sekunden es dauert, bis der Client einen REST-Anruf tätigt und eine Antwort erhält.
Ziggler
1
Achten Sie auf die Verwendung TotalMinutes! (nicht Minutes)
Shahar Shokrani
63

Sie wollen die TimeSpanStruktur:

TimeSpan diff = dateTime1 - dateTime2;

Ein TimeSpan-Objekt stellt ein Zeitintervall (Zeitdauer oder verstrichene Zeit) dar, das als positive oder negative Anzahl von Tagen, Stunden, Minuten, Sekunden und Bruchteilen einer Sekunde gemessen wird. Die TimeSpan-Struktur kann auch zur Darstellung der Uhrzeit verwendet werden, jedoch nur, wenn die Uhrzeit nicht mit einem bestimmten Datum zusammenhängt.

Es gibt verschiedene Methoden, um die Tage, Stunden, Minuten, Sekunden und Millisekunden von dieser Struktur zurückzugewinnen.

Wenn Sie nur an dem Unterschied interessiert sind, dann:

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

gibt Ihnen den positiven Unterschied zwischen den Zeiten unabhängig von der Reihenfolge.

Wenn Sie gerade die Zeitkomponente erhalten haben, die Zeiten jedoch bis Mitternacht aufgeteilt werden können, müssen Sie die Zeitspanne um 24 Stunden verlängern, um die tatsächliche Differenz zu erhalten:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}
ChrisF
quelle
Hallo, wenn datetime2 09:00 und dateTime1 18:00 ist, dann ist diff 09hours 00 min. dann ist die Gleichung für datetime2 21:00 und dateTime1 ist 03:00, dann ist die Differenz negativ und falsch. Wie kann man das lösen?
Pranesh Janarthanan
@Pranesh - Wenn die Objekte ein Datum enthalten, sollte es kein Problem geben. Wenn sie keine Zeit enthalten, nehmen Sie entweder die absolute Differenz oder addieren Sie 24 Stunden zur Zeitspanne, um eine positive Differenz zu erhalten. Welches richtig ist, hängt von Ihrer Bewerbung ab.
ChrisF
Ja, ich habe diesen Kommentar bereits entfernt! Können Sie mir ein Codebeispiel für Ihre Erklärung zeigen?
Pranesh Janarthanan
30

Sie müssen lediglich die Subtract-Methode der DateTime- Klassen verwenden, die einen TimeSpan zurückgibt .

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
quelle
10

Die Art und Weise, wie ich es normalerweise mache, ist das Subtrahieren der beiden DateTime und dies bringt mir eine Zeitspanne, die mir den Unterschied sagt.

Hier ist ein Beispiel:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
Darik
quelle
4

WENN beide UTC-Datums- / Uhrzeitwerte sind, können Sie dies tun TimeSpan diff = dateTime1 - dateTime2;

Andernfalls ist Ihre Chance, in jedem möglichen Fall die richtige Antwort zu erhalten, Null.

Ian Mercer
quelle
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
quelle
2

Sie müssen einen TimeSpan verwenden . Hier ist ein Beispielcode:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
Jason Webb
quelle
2
Oder einfachTimeSpan 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
quelle
2

Sie können auf folgende Weise verwenden, um einen Unterschied zwischen zwei Datetime-Objekten zu erzielen. Angenommen, es gibt DateTime-Objekte dt1 und dt2, dann den Code.

TimeSpan diff = dt2.Subtract(dt1);
Sonniger Sandeep
quelle