Ответ 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.