2012-06-03 95 views
25

Tôi có hai lịch và mỗi lịch trả về một DateTime từ lịch.SelectedDate.Trừ hai ngày

Tôi làm cách nào để trừ khoảng hai ngày đã chọn khỏi nhau, cho tôi số ngày giữa hai lựa chọn?

Có lịch.Subtract() nhưng cần một TimeSpan thay vì DateTime.

Trả lời

36

Bạn có thể sử dụng someDateTime.Subtract(otherDateTime), số này trả về một số TimeSpan trong đó có thuộc tính TotalDays.

+0

Bạn cũng có thể vượt qua 'Subtract() 'a' TimeSpan' và nó sẽ trả về một' DateTime'. http://msdn.microsoft.com/en-us/library/ae6246z1%28v=vs.110%29.aspx – northben

25

Chỉ cần sử dụng:

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

Lưu ý rằng nếu bạn muốn đối xử với họ như ngày có lẽ bạn nên sử dụng

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

Bằng cách đó bạn sẽ không nhận được kết quả khác nhau tùy thuộc vào thời gian .

(Bạn có thể sử dụng phương pháp Subtract thay vì các nhà điều hành - nếu bạn muốn, nhưng cá nhân tôi thấy nó rõ ràng hơn để sử dụng các nhà điều hành.)

+14

Đó là một người đàn ông táo bạo chỉnh sửa SkeetCode (tm). Làm tốt lắm Bhushan. – keithl8041

3

Hãy suy nghĩ về nó.
Làm thế nào để bạn thể hiện sự khác biệt giữa hai ngày? Với một ngày khác?
Đó là lý do tại sao bạn cần 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

Thực tế có nhiều vấn đề khác nhau khi sử dụng TimeSpan để biểu thị sự khác biệt giữa hai ngày, nhưng trong trường hợp * này thì không sao :) –

+0

Cảm ơn tất cả đầu vào. Trên thực tế tôi chỉ cần ngày và tôi đã không thấy rằng các phương pháp trừ cũng có thể mất một tham số DateTime có nghĩa là tất cả tôi cần là này: untilCalendar.SelectedDate.Subtract (fromCalendar.SelectedDate) .Days –

+0

@sd_dracula: Bạn có chắc chắn thích sử dụng Phương pháp 'Trừ trừ' thay vì toán tử? –