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


159

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

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.


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

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

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;

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.


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

2

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

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);

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

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.