2009-05-10 29 views
71

Necesito una función que puede devolver la diferencia entre las dos fechas siguientes como 24.Diferencia entre dos DateTimes C#?

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

Respuesta

135

Usted puede hacer lo siguiente:

TimeSpan duration = b - a; 

Hay un montón de construido en los métodos de la clase lapso de tiempo para hacer lo que necesita, es decir,

duration.TotalSeconds 
duration.TotalMinutes 

Más información se puede encontrar here.

+0

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

15

Pruebe lo siguiente

double hours = (b-a).TotalHours; 

Si lo que desea es la diferencia horaria con exclusión de la diferencia de días se puede use la siguiente

int hours = (b-a).Hours; 

La diferencia entre estas dos propiedades se ve principalmente cuando la diferencia de tiempo es mayor que 1 día. La propiedad Horas solo informará la diferencia horaria real entre las dos fechas. Entonces, si dos fechas difieren en 100 años pero ocurren a la misma hora del día, las horas regresarían a 0. Pero TotalHours devolverá la diferencia entre la cantidad total de horas que ocurrió entre las dos fechas (876,000 horas en este caso).

La otra diferencia es que TotalHours devolverá horas fraccionarias. Esto puede o no ser lo que quieres. De lo contrario, Math.Round puede ajustarlo a su gusto.

+0

Todavía está mal. TotalHours es un doble, devuelve horas completas y fraccionarias. –

+2

@Vilx, no necesariamente incorrecto. La intención del OP es ambigua – JaredPar

+0

Es la respuesta correcta para la pregunta, quiere que el resultado sea 24, lo que sería. Por supuesto, podría rodear el TotalHours él mismo con bastante facilidad si eso es lo que quiere. –

2

¿Está quizá buscando:

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

Me da una vuelta 1? – abmv

+0

Realmente necesitaría ser int Diferencia = (a-b) .TotalHours; –

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

X.totalhours se puede utilizar con mucha más propiedades de TimeSpan.

0

La diferencia horaria b/w a la hora se mostrará con este método.

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

utilizar

var t1 de su campo Identificación del captura un valor de 04 a.m.

verificación de este código puede ser útil a alguien.