2009-05-10 14 views
71

Ho bisogno di una funzione che può restituire la differenza tra le due date di seguito come 24.Differenza tra due DateTimes C#?

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

risposta

135

È possibile effettuare le seguenti operazioni:

TimeSpan duration = b - a; 

C'è un sacco di costruito in metodi della classe periodo di fare ciò che è necessario, vale a dire

duration.TotalSeconds 
duration.TotalMinutes 

Maggiori informazioni possono essere trovate here.

+0

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

15

Provate il seguente

double hours = (b-a).TotalHours; 

Se si desidera solo la differenza di tempo escludendo la differenza di giorni si può utilizzare il seguente

int hours = (b-a).Hours; 

la differenza tra queste due proprietà è principalmente visto quando la differenza è superiore a 1 giorno. La proprietà Hours riporta solo la differenza oraria effettiva tra le due date. Pertanto, se due date differiscono di 100 anni ma si verificano nello stesso momento del giorno, le ore restituiscono 0. Ma TotalHours restituirà la differenza tra il numero totale di ore occorse tra le due date (876.000 ore in questo caso).

L'altra differenza è che TotalHours restituirà ore frazionarie. Questo può o non può essere quello che vuoi. In caso contrario, Math.Round può adattarlo a proprio piacimento.

+0

Ancora sbagliato. TotalHours è un doppio, restituendo ore intere e frazionarie. –

+2

@Vilx, non necessariamente sbagliato. L'intento dell'OP è ambiguo – JaredPar

+0

È la risposta giusta per la domanda, vuole che il risultato sia 24 quale sarebbe. Certo, potrebbe arrotondare lo stesso TotalHours se questo è ciò che vuole. –

2

Stai forse cercando:

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

Mi restituisce 1? – abmv

+0

In realtà dovrebbe essere int Differenza = (a-b) .Totale; –

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

X.totalhours può essere utilizzato con un sacco più proprietà di TimeSpan.

0

La differenza di tempo in bianco e nero verrà visualizzata con questo metodo.

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

utilizzare il campo di id

var t1 acquisisce un valore di 04:00

controllo di questo codice può essere utile a qualcuno.