Разница между двумя DateTimes С#?

Мне нужна функция, которая может вернуть разницу между двумя датами ниже как 24.

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

person abmv    schedule 10.05.2009    source источник


Ответы (4)


Вы можете сделать следующее:

TimeSpan duration = b - a;

В классе timepan есть множество встроенных методов, которые делают то, что вам нужно, т.е.

duration.TotalSeconds
duration.TotalMinutes

Дополнительную информацию можно найти здесь.

person Joey Robert    schedule 10.05.2009
comment
Диапазон TimeSpan = x.ShiftEndTime.Subtract(x.ShiftStartTime) if (span.TotalHours == 24) {do...} - person abmv; 10.05.2009

Попробуйте следующее

double hours = (b-a).TotalHours;

Если вам просто нужна разница в часах, исключая разницу в днях, вы можете использовать следующее

int hours = (b-a).Hours;

Разница между этими двумя свойствами в основном видна, когда разница во времени составляет более 1 дня. Свойство Hours будет сообщать только фактическую разницу в часах между двумя датами. Таким образом, если две даты отличаются на 100 лет, но произошли в одно и то же время дня, часы вернут 0. Но TotalHours вернет разницу между общим количеством часов, которые произошли между двумя датами (в данном случае 876 000 часов).

Другое отличие состоит в том, что TotalHours будет возвращать дробные часы. Это может быть или не быть тем, что вы хотите. Если нет, Math.Round может настроить его по своему вкусу.

person JaredPar    schedule 10.05.2009
comment
Все еще неправильно. TotalHours — это двойное значение, возвращающее целые и дробные часы. - person Vilx-; 10.05.2009
comment
Это правильный ответ на вопрос, он хочет, чтобы результат был 24, что и было бы. Конечно, он мог бы сам легко округлить TotalHours, если бы захотел. - person James Avery; 10.05.2009
comment
@ Джеймс, мой ответ дает ровно 24. ОП не указывал, что значение должно быть в определенном числовом формате. - person JaredPar; 10.05.2009
comment
@abmv: OP - Оригинальный постер. В этом случае вы. - person Cerebrus; 10.05.2009
comment
@ Джаред, я знаю, что был согласен с тобой. Я думаю, что ваш ответ является лучшим ответом, чем выбранный. - person James Avery; 10.05.2009
comment
@Джеймс, извини. Только наполовину выпила первую чашку кофе этим утром и еще не совсем проснулась. :) - person JaredPar; 10.05.2009

Возможно, вы ищете:

int Difference = (a-b).Hours;
person Vilx-    schedule 10.05.2009
comment
На самом деле должно быть int Difference = (a-b).TotalHours; - person Pieter Vandenheede; 03.10.2013

При использовании этого метода будет показана разница во времени между ч/б и временем.

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

используйте идентификатор вашего поля

var t1 фиксирует значение 4:00 утра.

проверьте этот код может быть кому-то полезен.

person Darshan    schedule 25.02.2016