Это очень легко сделать с помощью C #. Для сравнения DateTimes у нас есть класс с именем TimeSpan . Структура TimeSpan в этом случае будет определена как как разница между вашими двумя датами .
Допустим, ваши DateTime называются start и end.
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
Мы установили наши DateTimes на 14 июня 2009 г. и 14 декабря 2009 г.
Теперь давайте найдем разницу между ними. Для этого мы создаем интервал времени:
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 (особенно в примерах C #).
Надеюсь, я помог!
ОБНОВЛЕНИЕ: В некоторых ответах предлагается выполнить вычитание за один шаг, например, с помощью:
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, имеет вид:
Возвращает наименьшее целое значение
это больше или равно
указанная двойная точность
число с плавающей точкой.
Как вы хотите считать дни?
Таким образом, у нас теперь есть проблема с тем, как вы хотите считать дни . Вы хотите считать часть дня (например, .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.
Подсчет как часть дня (НЕ используя 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.