Різниця між двома датами C #?


97

Мені потрібна функція, яка може повернути різницю між двома датами нижче як 24.

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

Відповіді:


185

Ви можете зробити наступне:

TimeSpan duration = b - a;

У класі часового інтервалу є багато вбудованих методів, щоб робити те, що вам потрібно, тобто

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 день. Властивість Години повідомляє лише фактичну різницю в годинах між двома датами. Отже, якщо дві дати відрізнялися на 100 років, але відбувались одночасно в день, години повернули б 0. Але TotalHours поверне різницю між загальною кількістю годин, що відбулися між двома датами (у цьому випадку 876 000 годин).

Інша відмінність полягає в тому, що TotalHours поверне дробові години. Це може бути, а може і не те, що ви хочете. Якщо ні, Math.Round може налаштувати його на свій смак.


Все-таки неправильно. TotalHours - це подвійний час, що повертає цілі та дробові години.
Вількс

Це правильна відповідь на питання, він хоче, щоб результат був 24, яким він і був би. Звичайно, він міг би досить легко обійти TotalHours, якщо саме цього він хоче.
Джеймс Ейвері,

@James, моя відповідь дає точно 24. В ОП не вказано, що значення повинно мати певний формат числа.
JaredPar,

1
@abmv: "OP" - оригінальний плакат. У цьому випадку ви.
Церебрус

@Jared, я знаю, що погоджувався з тобою. Я думаю, що ваша відповідь є кращою, ніж обрана.
Джеймс Ейвері,




-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

перевірте, чи може цей код комусь стати в нагоді.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.