2010-05-12 14 views

Antwort

165

Das folgende Beispiel zeigt, wie dies zu tun:

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

Wenn diesen Druck ausgeführt „30“, da es eine ist 30 Minuten Differenz zwischen dem Datum/Zeit.

Das Ergebnis von DateTime.Subtract(DateTime x) ist ein TimeSpan Object, das andere nützliche Eigenschaften gibt.

+4

Um den Unterschied anzuzeigen, gehen Sie folgendermaßen vor: 'Console.WriteLine ((a - b) .ToString (@" hh \: mm \: ss ")) '. Siehe: [MSDN Custom TimeSpan Format] (http://msdn.microsoft.com/en-us/library/ee372287 (v ​​= vs.100) .aspx) – ishmael

19

Was Sie brauchen, ist die Verwendung der DateTime Klasse Subtract-Methode, die eine 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)); 
45

Sie wollen die TimeSpan Struktur:

TimeSpan diff = dateTime1 - dateTime2; 

Ein Timespan-Objekt repräsentiert ein Zeitintervall (Dauer der Zeit oder der verstrichenen Zeit), die als eine positive oder negative Zahl der Tage, Stunden gemessen Minuten, Sekunden und Sekundenbruchteile. Die TimeSpan-Struktur kann auch zur Darstellung der Uhrzeit verwendet werden, jedoch nur dann, wenn die Zeit nicht mit einem bestimmten Datum verknüpft ist.

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

Wenn Sie sind nur daran interessiert, die Differenz dann:

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

geben Ihnen die positive Differenz zwischen den Zeiten unabhängig von der Reihenfolge.

Wenn Sie nur die Zeitkomponente erhalten haben, aber die Zeiten von Mitternacht aufgeteilt werden könnte, dann müssen Sie 24 Stunden die Spanne hinzufügen, um die tatsächliche Differenz zu erhalten:

TimeSpan diff = dateTime1 - dateTime2; 
if (diff < 0) 
{ 
    diff = diff + TimeSpan.FromDays(1); 
} 
+0

Hallo, wenn datetime2 09:00 Uhr und 18.00 Uhr ist dateTime1 dann diff ist 09Hours 00 min. Was ist dann die Gleichung für datetime2 ist 21:00 und dateTime1 ist 03:00 dann ist die Differenz negativ und falsch. Wie löst man das? – Vijayaraghavan

+0

@Pranesh - Wenn die Objekte ein Datum enthalten, sollte es kein Problem geben. Wenn sie keine Zeit enthalten, dann nehmen Sie entweder die absolute Differenz oder fügen Sie 24 Stunden zu der Zeitspanne hinzu, um eine positive Differenz zu erhalten. Was richtig ist, hängt von Ihrer Anwendung ab. – ChrisF

+0

Ja, ich habe diese Kommentare bereits entfernt! Kannst du mir ein Codebeispiel für deine Erklärung zeigen? – Vijayaraghavan

3

Sie benötigen einen TimeSpan zu verwenden. Hier ist ein Beispielcode:

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

Oder nur 'TimeSpan sinestast = DateTime.Now - LastUpdate;' –

9

Die Art, wie ich es normalerweise mache, ist das Subtrahieren der beiden DateTime und das bringt mir eine TimeSpan, die mir das Diff sagen wird.

Hier ist ein Beispiel:

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

wenn sie beide UTC-Datum-Zeitwerte sind Sie tun können, TimeSpan diff = dateTime1 - dateTime2;

Ansonsten Ihre Chance, in jedem einzelnen Fall möglich, die richtige Antwort zu bekommen Null ist.

2
private void button1_Click(object sender, EventArgs e) 
{ 
    TimeSpan timespan; 
    timespan = dateTimePicker2.Value - dateTimePicker1.Value; 
    int timeDifference = timespan.Days; 
    MessageBox.Show(timeDifference.ToString()); 
} 
1

Sie können folgendermaßen verwenden, um den Unterschied zwischen zwei Datetime-Objekten zu erzielen. Angenommen, es gibt DateTime-Objekte dt1 und dt2 und dann den Code.

TimeSpan diff = dt2.Subtract(dt1); 
2
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); 
Verwandte Themen