2012-06-03 7 views
25

Mam dwa kalendarze i każdy zwraca DateTime z calendar.SelectedDate.Odejmowanie dwóch dat

Jak odejść od odjęcia dwóch wybranych dat od siebie, podając liczbę dni między dwoma wyborami?

Istnieje calendar.Subtract(), ale potrzebuje TimeSpan zamiast DateTime.

Odpowiedz

36

Można użyć someDateTime.Subtract(otherDateTime), to zwraca TimeSpan, która ma właściwość TotalDays.

+0

Można także przekazać 'Odejmij()' 'a TimeSpan' i zwróci' DateTime'. http://msdn.microsoft.com/en-us/library/ae6246z1%28v=vs.110%29.aspx – northben

25

Wystarczy użyć:

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

Pamiętaj, że jeśli chcesz, aby traktować je jako daty należy prawdopodobnie użyć

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

W ten sposób nie będzie uzyskać różne wyniki w zależności od czasów .

(Można użyć metody Subtract zamiast operatora - jeśli chcesz, ale osobiście uważam, że jaśniejsze użyć operatora).

+14

To odważny człowiek, który poprawia SkeetCode (tm). Dobra robota, Bhushan. – keithl8041

3

Pomyśl o tym.
Jak wyrazić różnicę między dwiema datami? Z inną datą?
Dlatego potrzebujemy Okres

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

W rzeczywistości istnieją różne problemy z używaniem TimeSpan do reprezentowania różnicy między dwiema datami, ale w * tym * przypadku jest OK :) –

+0

Dzięki za wszystkie dane wejściowe. Właściwie to potrzebuję tylko dnia i nie widzę, że metoda Subtract może również przyjąć parametr DateTime, co oznacza, że ​​wszystko, czego potrzebuję, to: untilCalendar.SelectedDate.Subtract (fromCalendar.SelectedDate) .Days –

+0

@dd_dracula: Czy na pewno wolisz używać Metoda "odejmowania" zamiast operatora? –