Différence entre deux DateTimes C #?

97

J'ai besoin d'une fonction qui peut renvoyer la différence entre les deux dates ci-dessous comme 24.

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

Réponses:

185

Vous pouvez faire ce qui suit:

TimeSpan duration = b - a;

Il existe de nombreuses méthodes intégrées dans la classe timespan pour faire ce dont vous avez besoin, c'est-à-dire

duration.TotalSeconds
duration.TotalMinutes

Plus d'informations peuvent être trouvées ici .

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

Essayez ce qui suit

double hours = (b-a).TotalHours;

Si vous voulez juste la différence d'heure en excluant la différence en jours, vous pouvez utiliser ce qui suit

int hours = (b-a).Hours;

La différence entre ces deux propriétés se voit principalement lorsque le décalage horaire est supérieur à 1 jour. La propriété Hours ne signalera que la différence d'heure réelle entre les deux dates. Ainsi, si deux dates différaient de 100 ans mais se produisaient à la même heure dans la journée, les heures renverraient 0. Mais TotalHours renverra la différence entre le nombre total d'heures qui se sont produites entre les deux dates (876 000 heures dans ce cas).

L'autre différence est que TotalHours renverra des heures fractionnaires. Cela peut ou non être ce que vous voulez. Sinon, Math.Round peut l'ajuster à votre guise.

JaredPar
la source
Toujours incorrecte. TotalHours est un double, renvoyant des heures entières et fractionnaires.
Vilx-
C'est la bonne réponse à la question, il veut que le résultat soit 24 ce qu'il serait. Bien sûr, il pourrait contourner les TotalHours lui-même assez facilement si c'est ce qu'il veut.
James Avery
@James ma réponse produit exactement 24. L'OP n'a pas précisé que la valeur devait être un format numérique particulier.
JaredPar
1
@abmv: "OP" - Affiche originale. Dans ce cas, vous.
Cerebrus
@Jared, je sais que j'étais d'accord avec vous. Je pense que votre réponse est la meilleure réponse que celle choisie.
James Avery
3

Cherchez-vous peut-être:

int Difference = (a-b).Hours;
Vilx-
la source
Devrait en fait être int Différence = (ab) .TotalHours;
Pieter Vandenheede
1
var theDiff24 = (b-a).Hours
diadiora
la source
1
int hours = (int)Math.Round((b - a).TotalHours)
Damien
la source
-1

La différence de temps b / w par rapport au temps sera affichée en utilisant cette méthode.

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

utilisez vos identifiants de champ

var t1 capture une valeur de 4:00 AM

vérifier ce code peut être utile à quelqu'un.

Darshan
la source