2009-05-10 15 views
71

Ich brauche eine Funktion, die die Differenz zwischen den folgenden beiden Daten als 24.Unterschied zwischen zwei DateTimes C#?

DateTime a = new DateTime(2008, 01, 02, 06, 30, 00); 
DateTime b = new DateTime(2008, 01, 03, 06, 30, 00); 

Antwort

135

können Sie wie folgt vorgehen:

TimeSpan duration = b - a; 

Es gibt viel in Methoden in der Zeitspanne Klasse gebaut zu tun, was Sie brauchen, das heißt

duration.TotalSeconds 
duration.TotalMinutes 

Weitere Daten können here finden.

+0

TimeSpan span = x.ShiftEndTime.Subtract (x.ShiftStartTime) if (span.TotalHours == 24) {do ...} – abmv

15

Versuchen folgende

double hours = (b-a).TotalHours; 

Wenn Sie nur die Stunde Differenz wollen ohne die Differenz in Tagen können Sie zurückkehren können verwenden die folgenden

int hours = (b-a).Hours; 

der Unterschied zwischen diesen beiden Eigenschaften ist vor allem zu sehen, wenn die Zeitdifferenz mehr als 1 ist, Tag. Die Stunden-Eigenschaft wird nur den tatsächlichen Stundenunterschied zwischen den zwei Daten melden. Wenn also zwei Daten sich um 100 Jahre unterscheiden, aber gleichzeitig am Tag auftreten, wird Stunden 0 zurückgeben. TotalHours gibt jedoch die Differenz zwischen der Gesamtanzahl der Stunden zwischen den beiden Daten zurück (in diesem Fall 876.000 Stunden).

Der andere Unterschied besteht darin, dass TotalHours die Nachkommastellen zurückgibt. Dies kann oder kann nicht sein, was Sie wollen. Wenn nicht, kann Math.Round es nach Ihren Wünschen anpassen. vielleicht

+0

Immer noch falsch. TotalHours ist ein Double, das ganze und ganze Stunden zurückgibt. –

+2

@Vilx, nicht unbedingt falsch. Die Absicht des OP ist mehrdeutig – JaredPar

+0

Es ist die richtige Antwort für die Frage, er will das Ergebnis 24 sein, die es sein würde. Natürlich könnte er die TotalHours selbst ganz leicht umrunden, wenn es das ist, was er will. –

2

Sind Sie auf der Suche nach:

int Difference = (a-b).Hours; 
+0

Gibt es mir eine Rendite 1? – abmv

+0

müsste tatsächlich sein int Differenz = (a-b) .TotalHours; –

1
int hours = (int)Math.Round((b - a).TotalHours) 
0
TimeSpan X = b - a; 

X.totalhours können mit viel mehr Eigenschaften von TimeSpan verwendet werden.

0

Der Zeitunterschied zwischen S/W und Zeit wird angezeigt, wenn diese Methode verwendet wird.

private void HoursCalculator() 
    { 
     var t1 = txtfromtime.Text.Trim(); 
     var t2 = txttotime.Text.Trim(); 
     var Fromtime = t1.Substring(6); 
     var Totime = t2.Substring(6); 
     if (Fromtime == "M") 
     { 
      Fromtime = t1.Substring(5); 
     } 
     if (Totime == "M") 
     { 
      Totime = t2.Substring(5); 
     } 

     if (Fromtime=="PM" && Totime=="AM") 
     { 
      var dt1 = DateTime.Parse("1900-01-01 " + txtfromtime.Text.Trim()); 
      var dt2 = DateTime.Parse("1900-01-02 " + txttotime.Text.Trim()); 
      var t = dt1.Subtract(dt2); 
      //int temp = Convert.ToInt32(t.Hours); 
      //temp = temp/2; 
      lblHours.Text =t.Hours.ToString() + ":" + t.Minutes.ToString(); 

     } 
     else if (Fromtime == "AM" && Totime == "PM") 
     { 
      var dt1 = DateTime.Parse("1900-01-01 " + txtfromtime.Text.Trim()); 
      var dt2 = DateTime.Parse("1900-01-01 " + txttotime.Text.Trim()); 
      TimeSpan t = (dt2.Subtract(dt1)); 
      lblHours.Text = t.Hours.ToString() + ":" + t.Minutes.ToString(); 
     } 
     else 
     { 
      var dt1 = DateTime.Parse("1900-01-01 " + txtfromtime.Text.Trim()); 
      var dt2 = DateTime.Parse("1900-01-01 " + txttotime.Text.Trim()); 
      TimeSpan t = (dt2.Subtract(dt1)); 
      lblHours.Text = t.Hours.ToString() + ":" + t.Minutes.ToString(); 
     } 
    } 

benutzen Sie Ihr Feld

var t1 von id einen Wert von 04.00

Prüfung fängt dieser Code hilfreich für jemanden sein kann.