2012-06-03 3 views
25

У меня есть два календаря, и каждый возвращает DateTime из calendar.SelectedDate.Вычитание двух дат

Как мне выбрать вычитание двух выбранных дат друг от друга, давая мне количество дней между двумя выборами?

Существует календарь. Subtract(), но для него требуется TimeSpan вместо DateTime.

ответ

36

Вы можете использовать someDateTime.Subtract(otherDateTime), это возвращает TimeSpan, у которого есть TotalDays.

+0

Вы также можете передать 'Subtract()' 'TimeSpan' и он будет возвращать' DateTime'. http://msdn.microsoft.com/en-us/library/ae6246z1%28v=vs.110%29.aspx – northben

25

Просто используйте:

TimeSpan difference = end - start; 
double days = difference.TotalDays; 

Обратите внимание, что если вы хотите, чтобы рассматривать их как даты вы, вероятно, следует использовать

TimeSpan difference = end.Date - start.Date; 
int days = (int) difference.TotalDays; 

Таким образом, вы не получите разные результаты в зависимости от времени ,

(Вы можете использовать метод Subtract вместо оператора -, если вы хотите, но лично я считаю, что понятнее использовать оператор.)

+14

Это смелый человек, который исправляет SkeetCode (tm). Хорошая работа Бхушан. – keithl8041

3

Подумайте об этом.
Как вы выражаете разницу между двумя датами? С другой датой?
Вот почему вам нужен TimeSpan

DateTime dtToday = new System.DateTime(2012, 6, 2, 0, 0, 0); 
DateTime dtMonthBefore = new System.DateTime(2012, 5, 2, 0, 0, 0); 
TimeSpan diffResult = dtToday.Subtract(dtMonthBefore); 
Console.WriteLine(diffResult.TotalDays); 
+0

На самом деле есть различные проблемы с использованием TimeSpan для представления разницы между двумя датами, но в этом случае это нормально :) –

+0

Спасибо за все входные данные. На самом деле мне нужен только день, и я не видел, что метод Subtract также может принимать параметр DateTime, означающий все, что мне нужно, это следующее: untilCalendar.SelectedDate.Subtract (fromCalendar.SelectedDate) .Days –

+0

@sd_dracula: Вы определенно предпочитаете использовать 'Subtract', а не оператор? –

Смежные вопросы