Unterschied zwischen zwei DateTimes C #?

96

Ich benötige eine Funktion, die die Differenz zwischen den beiden folgenden Daten als 24 zurückgeben kann.

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

Antworten:

185

Sie können Folgendes tun:

TimeSpan duration = b - a;

In der Zeitspanne gibt es viele integrierte Methoden, um das zu tun, was Sie brauchen, dh

duration.TotalSeconds
duration.TotalMinutes

Weitere Infos finden Sie hier .

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

Versuche Folgendes

double hours = (b-a).TotalHours;

Wenn Sie nur die Stundendifferenz ohne die Differenz in Tagen möchten, können Sie Folgendes verwenden

int hours = (b-a).Hours;

Der Unterschied zwischen diesen beiden Eigenschaften wird hauptsächlich gesehen, wenn der Zeitunterschied mehr als 1 Tag beträgt. Die Eigenschaft Stunden gibt nur die tatsächliche Stundendifferenz zwischen den beiden Daten an. Wenn sich also zwei Daten um 100 Jahre unterscheiden, aber zur gleichen Zeit am Tag auftreten, geben die Stunden 0 zurück. TotalHours gibt jedoch die Differenz zwischen der Gesamtstundenzahl zurück, die zwischen den beiden Daten aufgetreten ist (in diesem Fall 876.000 Stunden).

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

JaredPar
quelle
Immer noch falsch. TotalHours ist eine doppelte, die ganze und gebrochene Stunden zurückgibt.
Vilx
Es ist die richtige Antwort auf die Frage, er möchte, dass das Ergebnis 24 ist, was es wäre. Natürlich könnte er die TotalHours ganz einfach selbst abrunden, wenn er das will.
James Avery
@ James meine Antwort ergibt genau 24. Das OP hat nicht angegeben, dass der Wert ein bestimmtes Zahlenformat sein muss.
JaredPar
1
@abmv: "OP" - Originalplakat. In diesem Fall Sie.
Cerebrus
@ Jared, ich weiß, ich stimmte dir zu. Ich denke, Ihre Antwort ist die bessere als die gewählte.
James Avery
3

Suchen Sie vielleicht:

int Difference = (a-b).Hours;
Vilx-
quelle
Müsste tatsächlich int sein Difference = (ab) .TotalHours;
Pieter Vandenheede
1
var theDiff24 = (b-a).Hours
Diadiora
quelle
1
int hours = (int)Math.Round((b - a).TotalHours)
Damien
quelle
-1

Die Zeitdifferenz s / w zur Zeit wird mit dieser Methode angezeigt.

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

Verwenden Sie Ihre Feld-IDs

var t1 erfasst einen Wert von 4:00 Uhr

Überprüfen Sie, ob dieser Code für jemanden hilfreich sein kann.

Darshan
quelle