Różnica między dwoma DateTimes C #?


97

Potrzebuję funkcji, która może zwrócić różnicę między dwiema poniższymi datami jako 24.

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

Odpowiedzi:


186

Możesz wykonać następujące czynności:

TimeSpan duration = b - a;

W klasie timespan jest wiele wbudowanych metod, które pozwalają robić to, czego potrzebujesz, np

duration.TotalSeconds
duration.TotalMinutes

Więcej informacji można znaleźć tutaj .


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

19

Spróbuj wykonać następujące czynności

double hours = (b-a).TotalHours;

Jeśli chcesz tylko poznać różnicę godzin, z wyłączeniem różnicy w dniach, możesz użyć poniższego

int hours = (b-a).Hours;

Różnica między tymi dwoma właściwościami jest widoczna głównie wtedy, gdy różnica czasu jest większa niż 1 dzień. Właściwość Hours będzie raportować tylko rzeczywistą różnicę godzin między dwiema datami. Jeśli więc dwie daty różniły się o 100 lat, ale wystąpiły o tej samej porze dnia, godziny zwróciłyby 0. Ale TotalHours zwróci różnicę między całkowitą liczbą godzin, które wystąpiły między dwiema datami (w tym przypadku 876 000 godzin).

Inną różnicą jest to, że TotalHours zwraca ułamkowe godziny. To może być to, czego chcesz, ale nie musi. Jeśli nie, Math.Round może dostosować to do twoich potrzeb.


Wciąż źle. TotalHours to podwojona liczba godzin zwracająca pełne i ułamkowe.
Vilx-

To właściwa odpowiedź na pytanie, chce, aby wynik był 24, a tak by był. Oczywiście mógł dość łatwo obejść TotalHours, jeśli tego właśnie chce.
James Avery

@James moja odpowiedź daje dokładnie 24. W PO nie określono, że wartość miała mieć określony format liczbowy.
JaredPar

1
@abmv: "OP" - oryginalny plakat. W tym przypadku ty.
Cerebrus

@Jared, wiem, że się z tobą zgadzałem. Myślę, że twoja odpowiedź jest lepszą odpowiedzią niż wybrana.
James Avery




-1

Przy użyciu tej metody zostanie pokazana różnica czasu w stosunku do czasu.

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

użyj swoich identyfikatorów pola

var t1 przechwytuje wartość 4:00 rano

sprawdź ten kod może być pomocny dla kogoś.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.