2012-06-03 15 views
25

Ho due calendari e ognuno restituisce un DateTime da calendar.SelectedDate.Sottrarre due date

Come faccio a sottrarre le due date selezionate l'una dall'altra, dandomi il numero di giorni tra le due selezioni?

C'è un calendar.Subtract() ma ha bisogno di un TimeSpan invece di DateTime.

risposta

36

È possibile utilizzare someDateTime.Subtract(otherDateTime), questo restituisce un TimeSpan che ha una proprietà TotalDays.

+0

È possibile anche passare 'sottrarre()' 'un TimeSpan' e restituirà un' DateTime'. http://msdn.microsoft.com/en-us/library/ae6246z1%28v=vs.110%29.aspx – northben

25

Basta usare:

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

Si noti che se si vuole trattarli comedate che dovrebbe probabilmente utilizzare

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

In questo modo non sarà possibile ottenere risultati diversi a seconda dei tempi .

(È possibile utilizzare il metodo Subtract anziché l'operatore - se si vuole, ma personalmente trovo più chiaro utilizzare l'operatore.)

+14

È un uomo audace che corregge SkeetCode (tm). Bel lavoro Bhushan. – keithl8041

3

pensarci.
Come si esprime una differenza tra due date? Con un'altra data?
Ecco perché è necessario il 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

In realtà ci sono vari problemi con l'utilizzo di TimeSpan per rappresentare la differenza tra due date, ma in * questo * caso va bene :) –

+0

Grazie per tutti gli input. In realtà ho solo bisogno del giorno e non ho visto che il metodo Sottrazione può anche prendere un parametro DateTime che significa che tutto ciò di cui ho bisogno è questo: untilCalendar.SelectedDate.Subtract (fromCalendar.SelectedDate) .Days –

+0

@sd_dracula: Preferisci decisamente usare il 'Sottrai' metodo piuttosto che l'operatore? –