Подтвердить что ты не робот

Вычесть 2 поля datetime, чтобы получить разницу в леях

Был бы признателен, если кто-нибудь может помочь мне разобраться, чтобы выровнять 2 поля datetime, чтобы получить разницу в леях.

4b9b3361

Ответ 1

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

Скажем, что ваши DateTimes называются началом и концом.

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.


Конечный код

//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 (особенно примеры С#).

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

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

int days = (dt2 - dt1).Days;

или

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

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

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

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

Как следует из основного ответа на другой вопрос, вы можете использовать этот код:

int days = (int)Math.Ceiling(difference.TotalDays);

В этом коде используется Math.Ceiling, который в соответствии с MSDN:

Возвращает наименьшее интегральное значение что больше или равно заданная двойная точность число с плавающей запятой.

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

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

  • Полный день - это будет использовать Math.Ceiling для округления TimeSpan.TotalDays, так что вы рассчитываете начатые дни.
  • Часть дня - вы можете просто вернуть TimeSpan.TotalDays(не округленный) как десятичный (в двойном типе данных)
  • Nothing - вы можете игнорировать эту часть дня и просто вернуть 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.

Подсчитайте как часть дня (НЕ используя 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.

Ответ 2

Использование

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;  

Ответ 3

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

код 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

С#.Net code;

    DateTime lDate1;
    DateTime lDate2;
    TimeSpan tsTimeSpan ;
    int NumberOfDays;
      //Initialize date variables here
      tsTimeSpan = ldDate1 .Subtract(ldDate2);
      NumberOfDays = tsTimeSpan.days;

Ответ 4

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;

Ответ 5

Разница между днями

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

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

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

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

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

Некоторые примеры данных, чтобы завершить его using System namespace:

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

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

Ответ 6

DateTime theDate = DateTime.Today;
int datediff = theDate.Subtract(expiryDate).Negate().Days;
if expiryDate > theDate then you get Negative value: -14
expiryDate is less than theDate then you get positive value: 14

Вероятно, вы захотите этого в сценарии, например

  • Отправить уведомление по электронной почте 14 дней до истечения срока действия
  • Отправить еще одно уведомление по электронной почте через 14 дней после истечения срока действия

Вам нужна разница, которая может быть отрицательным значением

Ответ 7

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

Ответ 8

Чтобы получить точные дни, игнорирующие временной раздел

    DateTime d1 = Convert.ToDateTime(DateTime.Now.ToShortDateString());
    DateTime d2 = Convert.ToDateTime(DateTime.Now.AddDays(46).ToShortDateString());

    var days = Convert.ToInt32(d2.Subtract(d1).TotalDays)