¿Diferencia entre dos DateTimes C #?

97

Necesito una función que pueda devolver la diferencia entre las dos fechas siguientes como 24.

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

Respuestas:

185

Puede hacer lo siguiente:

TimeSpan duration = b - a;

Hay muchos métodos integrados en la clase de intervalo de tiempo para hacer lo que necesita, es decir

duration.TotalSeconds
duration.TotalMinutes

Puede encontrar más información aquí .

Joey Robert
fuente
1
TimeSpan span = x.ShiftEndTime.Subtract (x.ShiftStartTime) if (span.TotalHours == 24) {do ...}
abmv
19

Prueba lo siguiente

double hours = (b-a).TotalHours;

Si solo desea la diferencia horaria excluyendo la diferencia en días, puede usar lo siguiente

int hours = (b-a).Hours;

La diferencia entre estas dos propiedades se ve principalmente cuando la diferencia horaria es de más de 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 ocurrieron a la misma hora en el día, las horas devolverían 0. Pero TotalHours devolverá la diferencia entre la cantidad total de horas que ocurrieron entre las dos fechas (876,000 horas en este caso).

La otra diferencia es que TotalHours devolverá horas fraccionarias. Esto puede ser lo que desea o no. Si no es así, Math.Round puede ajustarlo a su gusto.

JaredPar
fuente
Sigue siendo incorrecto. TotalHours es un doble, que devuelve horas enteras y fraccionarias.
Vilx-
Es la respuesta correcta para la pregunta, quiere que el resultado sea 24, lo que sería. Por supuesto, podría redondear las TotalHours él mismo con bastante facilidad si eso es lo que quiere.
James Avery
@James mi respuesta produce 24 exactamente. El OP no especificó que el valor tenía que ser un formato de número particular.
JaredPar
1
@abmv: "OP" - Póster original. En este caso, tú.
Cerebrus
@Jared, sé que estaba de acuerdo contigo. Creo que tu respuesta es la mejor respuesta que la elegida.
James Avery
3

¿Quizás estás buscando:

int Difference = (a-b).Hours;
Vilx-
fuente
En realidad, tendría que ser int Difference = (ab) .TotalHours;
Pieter Vandenheede
1
var theDiff24 = (b-a).Hours
diadiora
fuente
1
int hours = (int)Math.Round((b - a).TotalHours)
Damien
fuente
-1

Utilice este método para mostrar la diferencia horaria entre b / p.

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

usa tu ID de campo

var t1 captura un valor de 4:00 AM

comprobar que este código puede ser útil para alguien.

Darshan
fuente