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

98

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

DateTime a = new DateTime(2008, 01, 02, 06, 30, 00);
DateTime b = new DateTime(2008, 01, 03, 06, 30, 00);
abmv
источник

Ответы:

186

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

TimeSpan duration = b - a;

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

duration.TotalSeconds
duration.TotalMinutes

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

Джои Роберт
источник
1
TimeSpan span = x.ShiftEndTime.Subtract (x.ShiftStartTime) if (span.TotalHours == 24) {do ...}
abmv
19

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

double hours = (b-a).TotalHours;

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

int hours = (b-a).Hours;

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

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

ДжаредПар
источник
Все равно ошибаюсь. TotalHours - это двойное число, возвращающее целые и дробные часы.
Vilx-
Это правильный ответ на вопрос, он хочет, чтобы результат был 24, что и было бы. Конечно, он мог бы довольно легко округлить общее количество часов, если бы он этого хотел.
Джеймс Эйвери,
@James, мой ответ дает ровно 24. OP не указал, что значение должно быть в конкретном числовом формате.
JaredPar
1
@abmv: "OP" - Оригинальный постер. В этом случае вы.
Cerebrus
@ Джаред, я знаю, что согласен с тобой. Думаю, ваш ответ - лучший ответ, чем выбранный.
Джеймс Эйвери,
3

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

int Difference = (a-b).Hours;
Вилкс-
источник
Фактически должно быть int Difference = (ab) .TotalHours;
Питер Ванденхеде, 03
1
int hours = (int)Math.Round((b - a).TotalHours)
Дэмиен
источник
-1

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

 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 AM

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

Даршан
источник