2015-09-29 21 views
9

tôi muốn so sánh một ngày nhất định đến ngày hôm nay và đây là điều kiện: Nếu ngày cung cấp lớn hơn hoặc bằng 6 tháng trước đó từ ngày hôm nay, trở thành sự thật khác trả về falseLàm thế nào để so sánh một ngày nhất định từ hôm nay

Mã số:

string strDate = tbDate.Text; //2015-03-29 
if (DateTime.Now.AddMonths(-6) == DateTime.Parse(strDate)) //if given date is equal to exactly 6 months past from today (change == to > if date has to be less 6 months) 
{ 
    lblResult.Text = "true"; //this doesn't work with the entered date above. 
} 
else //otherwise give me the date which will be 6 months from a given date. 
{ 
    DateTime dt2 = Convert.ToDateTime(strDate); 
    lblResult.Text = "6 Months from given date is: " + dt2.AddMonths(6); //this works fine 
} 
  • Nếu 6 tháng hoặc lớn hơn 6 tháng là những gì tôi muốn cho một trạng
  • Nếu dưới 6 tháng là điều kiện khác.
+0

Làm thế nào chính xác? Thời gian trong ngày có được tính không? –

+0

nếu thời gian không thay đổi tính ngay bây giờ với Hôm nay – CDrosos

+0

@WaiHaLee Chỉ vài tháng. Cảm ơn bạn. – Si8

Trả lời

11

vấn đề đầu tiên của bạn là bạn đang sử dụng DateTime.Now thay vì DateTime.Today - vì vậy trừ 6 tháng sẽ cung cấp cho bạn DateTime khác với một thời gian nhất định trong ngày, rất khó có khả năng được chính xác ngày/thời gian bạn đã được phân tích cú pháp. Đối với phần còn lại của bài đăng này, tôi giả định rằng giá trị mà bạn phân tích thực sự là một ngày, vì vậy bạn kết thúc bằng một số DateTime với thời gian nửa đêm. (Tất nhiên, theo quan điểm rất thiên vị của tôi, tốt hơn nên sử dụng a library which supports "date" as a first class concept ...)

Vấn đề tiếp theo là bạn giả định trừ 6 tháng kể từ ngày hôm nay và so sánh nó với ngày cố định tương đương với việc thêm 6 tháng đến ngày cố định và so sánh nó với ngày hôm nay. Họ không phải là cùng một hoạt động - số học lịch chỉ không hoạt động như thế. Bạn nên làm việc theo cách bạn muốn nó hoạt động, và nhất quán. Ví dụ:

DateTime start = DateTime.Parse(tbDate.Text); 
DateTime end = start.AddMonths(6); 
DateTime today = DateTime.Today; 
if (end >= today) 
{ 
    // Today is 6 months or more from the start date 
} 
else 
{ 
    // ... 
} 

Hoặc cách khác - và không tương đương:

DateTime target = DateTime.Parse(tbDate.Text); 
DateTime today = DateTime.Today; 
DateTime sixMonthsAgo = today.AddMonths(-6); 
if (sixMonthsAgo >= target) 
{ 
    // Six months ago today was the target date or later 
} 
else 
{ 
    // ... 
} 

Lưu ý rằng bạn chỉ nên đánh giá DateTime.Today (hoặc DateTime.Now vv) lần mỗi bộ tính toán - nếu không bạn có thể tìm thấy nó thay đổi giữa các đánh giá.

+0

Xin lỗi, đây là điều kiện: Nếu ngày được cung cấp lớn hơn hoặc bằng 6 tháng kể từ ngày hôm nay, trả về true false return false. – Si8

+0

@ SiKni8: 6 tháng * sau * so với hôm nay, hoặc 6 tháng * sớm hơn * so với hôm nay? Và bạn có hiểu rằng khác với "6 tháng kể từ ngày đã cho là hôm nay hay muộn hơn"? –

+0

6 tháng trước đó từ hôm nay. xin lỗi – Si8

1

Hãy thử với điều này

DateTime s = Convert.ToDateTime(tbDate.Text); 
s = s.Date; 

if (DateTime.Today.AddMonths(-6) == s) //if given date is equal to exactly 6 months past from today (change == to > if date has to be less 6 months) 
{ 
lblResult.Text = "true"; //this doesn't work with the entered date above. 
} 

thay thế == với> = hoặc < = theo yêu cầu của bạn

+0

Điểm của 's = s.Date + ts' là gì? 's = s.Date' sẽ cho kết quả tương tự. – juharr

+0

không chỉ lấy ngày từ s và đưa ra thời gian 00:00:00 – CDrosos

+0

'ts' là 0. Vì vậy, việc thêm nó sẽ không thay đổi bất cứ điều gì. – juharr

Các vấn đề liên quan