вычтите 2 поля даты и времени для получения дней, оставленных различие

Ценил бы его, если кто-либо может помочь мне выяснить к полям substract 2 даты и времени для получения дней, оставленных различие.

31
задан Cheeso 15 December 2009 в 06:45
поделиться

6 ответов

Используйте

TimeSpan

DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
TimeSpan travelTime = arrival - departure;  
5
ответ дан 27 November 2019 в 21:34
поделиться
DateTime dt1 = new DateTime(2009,01,01,00,00,00);
DateTime dt2 = new DateTime(2009,12,31,23,59,59);

int days = (dt2 - dt1).Days;
2
ответ дан 27 November 2019 в 21:34
поделиться

Вы должны посмотреть TimeSpan .

1
ответ дан 27 November 2019 в 21:34
поделиться

Самый простой выход - использовать TimeSpan (). Эта функция вычитания вернет вам разницу между двумя датами с точки зрения промежутка времени. Теперь вы можете получать такие поля, как дни, месяцы и т. Д. Для доступа к дням вы можете использовать Вот пример кода:

Код VB.Net;

    Dim tsTimeSpan As TimeSpan
    Dim ldDate1 as Date
    Dim ldDate2 as Date
      'Initialize date variables here
       tsTimeSpan = ldDate1 .Subtract(ldDate2)
       Dim NumberOfDays as integer = tsTimeSpan.days

Код C # .Net;

    DateTime lDate1;
    DateTime lDate2;
    TimeSpan tsTimeSpan ;
    int NumberOfDays;
      //Initialize date variables here
      tsTimeSpan = ldDate1 .Subtract(ldDate2);
      NumberOfDays = tsTimeSpan.days;
4
ответ дан 27 November 2019 в 21:34
поделиться

Разница в количестве дней

Эти ответы принимают количество дней в виде int из структуры System.TimeSpan , которая является результатом вычитание двух полей System.DateTime ...

Быстрый ответ - получает разницу в количестве дней.

        int numDaysDiff = date2.Subtract(date1).Days;

Альтернативный ответ - использует Math.Abs, чтобы убедиться, что это не отрицательный результат. число, на всякий случай даты могут быть указаны в любом порядке.

        int numDaysDiff = Math.Abs( date2.Subtract(date1).Days );

Некоторые примеры данных для завершения с использованием пространства имен System :

        // sample data
        DateTime date1 = DateTime.Now;
        DateTime date2 = DateTime.Now.AddDays(10);

Ссылки MSDN (и другие примеры кода):

2
ответ дан 27 November 2019 в 21:34
поделиться

Это очень легко сделать с помощью C #. Для сравнения DateTimes у нас есть класс под названием TimeSpan . Структура TimeSpan в данном случае будет определено как разница между двумя вашими датами .

Допустим, ваши DateTimes называются start и end.

DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

Мы установили наши DateTimes на 14 июня 2009 г. и 14 декабря 2009 г.

Теперь давайте найдем разницу между ними. Для этого мы создаем TimeSpan:

TimeSpan difference = end - start;

С помощью этого объекта TimeSpan вы можете выразить разницу во времени разными способами. Однако вы специально запросили разницу в днях, поэтому вот как вы можете это получить:

Console.WriteLine("Difference in days: " + difference.Days);

Таким образом, свойство называется TimeSpan.Days .


Final Code

//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

TimeSpan difference = end - start; //create TimeSpan object

Console.WriteLine("Difference in days: " + difference.Days); //Extract days, write to Console.

Дополнительные сведения о используя структуру TimeSpan, см. эту документацию MSDN (особенно примеры C #).

Надеюсь, я помог!

ОБНОВЛЕНИЕ: В некоторых ответах предлагалось выполнить вычитание за один шаг, например с:

int days = (dt2 - dt1).Days;

или

int numDaysDiff = Math.Abs(date2.Subtract(date1).Days);

Однако это то же самое, что и в моем ответе, только в сокращенном виде. Это связано с тем, что метод DateTime.Subtract () и оператор вычитания DateTimes возвращают TimeSpan , из которого затем можно получить доступ к количеству дней. Я специально использовал более длинный подход в моем примере кода, чтобы вы четко понимали, что происходит между вашими объектами DateTime и TimeSpan и как все это работает. Конечно, другие подходы, которые я только что упомянул, тоже хороши.

ОБНОВЛЕНИЕ №2:

Очень похожий вопрос задавался ранее, и его можно найти здесь . Однако главный вопрос этого вопроса заключался в том, почему образец кода (который по сути эквивалентен образцу всех ответов) иногда дает ответ, который является выходным днем. Думаю, это тоже важно для этого вопроса. что больше или равно указанная двойная точность число с плавающей запятой.

Как вы хотите считать дни?

Таким образом, теперь у нас возникла проблема с тем, как вы хотите считать дни . Вы хотите считать часть дня (например, 0,5 дня) как:

  • Полный день - это будет использовать Math.Ceiling для округления TimeSpan.TotalDays, чтобы вы начали отсчет дней.
  • Часть дня - вы можете просто вернуть TimeSpan.TotalDays (без округления) в виде десятичного числа (в двойном типе данных)
  • Ничего - вы можете игнорировать эту часть дня и просто верните TimeSpan.Days.

Вот примеры кода для вышеперечисленного:

Подсчет как полный день (с использованием Math.Ceiling () для округления):

//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

TimeSpan difference = end - start; //create TimeSpan object

int days = (int)Math.Ceiling(difference.TotalDays); //Extract days, counting parts of a day as a full day (rounding up).

Console.WriteLine("Difference in days: " + days); //Write to Console.

Подсчет как часть day (НЕ используя Math.Ceiling (), вместо этого оставив десятичную форму как часть дня):

//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

TimeSpan difference = end - start; //create TimeSpan object

double days = difference.TotalDays; //Extract days, counting parts of a day as a part of a day (leaving in decimal form).

Console.WriteLine("Difference in days: " + days); //Write to Console.

Считать день как ничто (округление до числа полных дней):

//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);

TimeSpan difference = end - start; //create TimeSpan object

int days = difference.TotalDays; //Extract days, counting parts of a day as nothing (rounding down).

Console.WriteLine("Difference in days: " + days); //Write to Console.
80
ответ дан 27 November 2019 в 21:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: