Сложение и вычитание операторы перегружены для DateTimeи TimeSpanтипов , как можно было бы ожидать. Это все довольно просто. - С какой именно проблемой вы столкнулись?
Этот ответ, очевидно, правильный, но вы также можете использовать его, (a - b).Daysесли вас интересует общее количество дней, intа не doubleдесятичное представление с частичной разницей в днях.
PFranchise
25
это вернет 1 меньше дней, 08/31 / 2013-08 / 01/2013 = 31, но это вернет только 30.
JRB
60
@JasRajBishnoi - вы можете проверить свою математику. Что такое 31 - 1?
Грег Бич
33
JasRaj также был прав в том смысле, что с учетом обеих дат он возвращает на день меньше разницы. Все зависит от перспективы.
Фахад Абид Джанджуа
28
@FahadAbidJanjua Это не вопрос или перспектива, а вопрос времени, я имею в виду временную часть даты. 31.08.2013 - 01.08.2013 действительно означает 31.08.2013 00:00:00 - 01.01.2013 00:00:00, что объясняет, почему 30 дней, потому что 31.08.2013 день только начинается. Это также объясняет, почему при обращении к свойству / полю DateTime надлежащим условием для получения диапазона является «DateTimeProperty > = FromDate && DateTimeProperty < ToDate.AddDays (1)»
Мигель Велозо
161
Верхний ответ верен, однако, если вы хотите, чтобы только целые дни были целыми числами и были рады отказаться от компонента времени даты, подумайте:
(EndDate.Date-StartDate.Date).Days
Опять при условии StartDateи EndDateимеют тип DateTime.
Лучший ответ, потому что «число дней» обычно означает целые дни. Стоит отметить , что Daysне останавливается на 365 (как и другие свойства , такие как Hours, Minutes, Secondкоторые накс значение , где начинается следующий выше свойство). Это так же, как, TotalDaysно без доли дня и возвращение intвместо double.
Тим
Будет ли это всегда работать так, как ожидалось? Например, если один из сравниваемых дней является днем перехода на летнее время с «весенним опережением», может ли вычитание создать интервал времени в 23 часа, и если да, будет ли значение .Days в этом 23-часовом интервале времени равно 0 ? (Я сам пытался поэкспериментировать с этим, но мои результаты пока безрезультатны - stackoverflow.com/questions/43644252/… )
Джон Шнайдер,
Да, это то, что мне было нужно - самый ценный ответ cmon теперь никто не хочет думать о минутах и секундах при подсчете дней
solujic
если только 1,5 дня прошло, эта функция .Days покажет только 1 день? как я могу изменить это, чтобы показать 2 дня? я просто должен всегда добавлять + 1 день?
CDrosos
2
Это голосование, потому что очень часто вам нужны «КАЛЕНДАРЬ дней между двумя датами», а не просто «количество 24-часовых интервалов». Например, вам нужно отобразить метку «X дней назад» на временной шкале. В этом случае разница между «понедельник 23:59» и «вторник 7:00» должна быть «1 день (назад)» ... Так что эта .Dateчасть действительно полезна. Надеюсь, я проясняю себя
Алекс
138
Используйте объект TimeSpan, который является результатом вычитания даты:
В любом случае, чтобы получить промежуточные дни в формате DateTime? Потому что мне нужно, чтобы каждая дата изменяла определенное поле в таблицах :) Редактировать: Получил и отправил как ответ ниже. Спасибо
sys_debug
4
DateTime xmas = new DateTime (DateTime.Today.Year, 12, 25); заставил бы это работать на ежегодной основе, а не только 2009 :)
1
Subtract () является OperatorOverload для DateTimes так его же «(Рождество - DateTime.Today) .TotalDays - только больше.
Марк
20
В случае , если кто - то хочет Numer целых дней , как двойные ( a, bтипа DateTime):
Хотя это всегда будет целое число (т. Е. N.00000), потому что часть Date всегда полночь.
JoeNCA
20
// Difference in days, hours, and minutes.TimeSpan ts =EndDate-StartDate;// Difference in days.int differenceInDays = ts.Days;// This is in intdouble differenceInDays= ts.TotalDays;// This is in double// Difference in Hours.int differenceInHours = ts.Hours;// This is in intdouble differenceInHours= ts.TotalHours;// This is in double// Difference in Minutes.int differenceInMinutes = ts.Minutes;// This is in intdouble differenceInMinutes= ts.TotalMinutes;// This is in double
Вы также можете получить разницу в секундах, миллисекундах и тиках.
Это действительно помогло мне лучше всего, поскольку моя разница в датах составляла полдня, но, тем не менее, когда Америка на 1 день отстает от Австралии, я должен видеть, что на самом деле разница в один день Другие ответы, упомянутые в этой теме, показывали либо ноль, либо некоторое двойное число ниже 1, которое мне не нужно.
Барри Гувенькая
Это лучший ответ, когда цель состоит в том, чтобы проверить, не перенесена ли дата на следующий день, независимо от того, не является ли с точки зрения времени полный 24-часовой день.
oneberenjena
4
Для таких начинающих, как я, эта простая проблема наткнется на простую строку с примером преобразования в int :
int totalDays =Convert.ToInt32((DateTime.UtcNow.Date- myDateTime.Date).TotalDays);
Это вычисляет общее количество дней с сегодняшнего дня (DateTime.UtcNow.Date) до желаемой даты (myDateTime.Date).
Если myDateTime вчера или более старая дата, чем сегодня, это даст положительный (+) целочисленный результат.
С другой стороны, если myDateTime будет завтра или в будущем, это даст отрицательный (-) целочисленный результат из-за правил добавления.
DateTime d =DateTime.Now;DateTime c =DateTime.Now;
c = d.AddDays(145);string cc;Console.WriteLine(d);Console.WriteLine(c);var t =(c - d).Days;Console.WriteLine(t);
cc =Console.ReadLine();
Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код. Также постарайтесь не переполнять ваш код пояснительными комментариями, так как это снижает удобочитаемость кода и пояснений!
protectedvoidCalendar1_SelectionChanged(object sender,EventArgs e){DateTime d =Calendar1.SelectedDate;// int a;TextBox2.Text= d.ToShortDateString();string s =Convert.ToDateTime(TextBox2.Text).ToShortDateString();string s1 =Convert.ToDateTime(Label7.Text).ToShortDateString();DateTime dt =Convert.ToDateTime(s).Date;DateTime dt1 =Convert.ToDateTime(s1).Date;if(dt <= dt1){Response.Write("<script>alert(' Not a valid Date to extend warranty')</script>");}else{string diff = dt.Subtract(dt1).ToString();Response.Write(diff);Label18.Text= diff;Session["diff"]=Label18.Text;}}
Этот код неверен во многих отношениях! 1) Много кода Winforms, не связанного с вопросом. 2) Проводной способ отображения окон сообщений с использованием (я думаю, элемент управления WebBrowser). 3) использование элемента управления WebBrowser для отображения текста, который уже отображается в метке. 4) Использование OperatorOverload Subtract () (по умолчанию для операций «-»), которое используется в любом случае, если вы делаете «MyDateA - MyDateB». 5) Нет объяснения этой куче кода.
DateTime
иTimeSpan
типов , как можно было бы ожидать. Это все довольно просто. - С какой именно проблемой вы столкнулись?Ответы:
Предполагая
StartDate
иEndDate
имеют типDateTime
:источник
(a - b).Days
если вас интересует общее количество дней,int
а неdouble
десятичное представление с частичной разницей в днях.Верхний ответ верен, однако, если вы хотите, чтобы только целые дни были целыми числами и были рады отказаться от компонента времени даты, подумайте:
Опять при условии
StartDate
иEndDate
имеют типDateTime
.источник
Days
не останавливается на 365 (как и другие свойства , такие какHours
,Minutes
,Second
которые накс значение , где начинается следующий выше свойство). Это так же, как,TotalDays
но без доли дня и возвращениеint
вместоdouble
..Date
часть действительно полезна. Надеюсь, я проясняю себяИспользуйте объект TimeSpan, который является результатом вычитания даты:
источник
Я думаю, что это будет делать то, что вы хотите:
источник
источник
В случае , если кто - то хочет Numer целых дней , как двойные (
a
,b
типаDateTime
):источник
Вы также можете получить разницу в секундах, миллисекундах и тиках.
источник
Вы можете попробовать это
источник
Для таких начинающих, как я, эта простая проблема наткнется на простую строку с примером преобразования в int :
Это вычисляет общее количество дней с сегодняшнего дня (DateTime.UtcNow.Date) до желаемой даты (myDateTime.Date).
Если myDateTime вчера или более старая дата, чем сегодня, это даст положительный (+) целочисленный результат.
С другой стороны, если myDateTime будет завтра или в будущем, это даст отрицательный (-) целочисленный результат из-за правил добавления.
Удачного кодирования! ^ _ ^
источник
Использование временного интервала решило бы проблемы, поскольку оно имеет много атрибутов:
источник
Для
a
иb
как дваDateTime
типа:источник
Сначала объявите класс, который вернется позже:
Используйте кнопку управления для вызова вышеуказанного класса. Вот пример:
источник
Вы можете использовать код ниже:
источник
Получите разницу между двумя датами, а затем получите дни из:
источник
источник