2011-10-24 33 views
6

Tôi phải kiểm tra xem ngày tháng (tháng năm) có nhỏ hơn ngày thực tế không.cách so sánh tháng năm với DateParse

tôi biết làm thế nào để làm điều đó chỉ với tháng duy nhất hoặc năm, như

DateTime.Parse(o.MyDate).Month <= DateTime.Now.Month 

hoặc

DateTime.Parse(o.MyDate).Year <= DateTime.Now.Year 

nhưng làm thế nào tôi có thể kiểm tra trực tiếp nếu tháng năm là âm hơn now.month- now.year?

EDIT

Những gì tôi phải làm là, ví dụ, để kiểm tra xem 10-2011 (DateTime.Now.Month-DateTime.Now.Year) là giữa 01-2011 và 04-2012. ..

+0

Có gì sai với những gì bạn có bây giờ? – Oded

+0

'Parse' sẽ luôn làm việc cho bạn? phân tích nó một lần và sau đó chơi xung quanh với các giá trị từ thể hiện được phân tích cú pháp, sẽ đơn giản hơn – V4Vendetta

+0

ví dụ, tôi phải kiểm tra xem 10-2011 (bây giờ) là giữa 01-2011 và 04-2012 ... – markzzz

Trả lời

5

Nếu năm đều giống nhau, so sánh tháng, nếu những năm qua là không giống nhau, năm của bạn phải nhỏ hơn bây giờ:

var yourDate = ...; 
if((yourDate.Year == DateTime.Now.Year && yourDate.Month < DateTime.Now.Month) 
    || yourDate.Year < DateTime.Now.Year) 
{ 
    // yourDate is smaller than todays month. 
} 

UPDATE:

Để kiểm tra xem yourDate là trong một khoảng thời gian nhất định, sử dụng này:

var yourDate = ...; 
var lowerBoundYear = 2011; 
var lowerBoundMonth = 1; 
var upperBoundYear = 2012; 
var upperBoundMonth = 4; 

if(((yourDate.Year == lowerBoundYear && yourDate.Month >= lowerBoundMonth) || 
    yourDate.Year > lowerBoundYear 
    ) && 
    ((yourDate.Year == upperBoundYear && yourDate.Month <= upperBoundMonth) || 
    yourDate.Year < lowerBoundYear 
    )) 
{ 
    // yourDate is in the time range 01/01/2011 - 30/04/2012 
    // if you want yourDate to be in the range 01/02/2011 - 30/04/2012, i.e. 
    // exclusive lower bound, change the >= to >. 
    // if you want yourDate to be in the range 01/01/2011 - 31/03/2012, i.e. 
    // exclusive upper bound, change the <= to <. 
} 
+0

Tôi đã cập nhật mục tiêu của mình. Nó sẽ không hoạt động với mã này. Xin lỗi, không rõ ràng :) Hy vọng bây giờ bạn có thể hiểu những gì tôi đang tìm kiếm ... – markzzz

+0

@markzzz: Vui lòng xem cập nhật. –

+0

Tôi biết cách thực hiện điều này bằng một tháng hoặc một năm. Nhưng không phải là những gì tôi hỏi :) Là nếu tôi có thể kiểm tra trực tiếp các tháng pari năm ... – markzzz

4
var date = DateTime.Parse(o.MyDate); 
var year = date.Year; 

// We don't even want to know what could happen at 31 Dec 23.59.59 :-) 
var currentTime = DateTime.Now; 
var currentYear = currentTime.Year; 

bool result = year < currentYear || 
       (year == currentYear && 
        date.Month <= currentTime.Month) 

tùy chọn thứ hai:

var date = DateTime.Parse(o.MyDate).Date; // We round to the day 
date = date.AddDays(-date.Day); // and we remove the day 

var currentDate = DateTime.Now.Date; 
currentDate = currentDate.AddDays(-currentDate.Day); 

bool result = date <= currentDate; 

tùy chọn thứ ba (thêm "trường cũ" có lẽ)

var date = DateTime.Parse(o.MyDate); 
var currentTime = DateTime.Now; 

// Each year can be subdivided in 12 parts (the months) 
bool result = date.Year * 12 + date.Month <= currentTime.Year * 12 + currentTime.Month; 
2
DateTime dateCheck = DateTime.Parse(o.MyDate); 
bool result = ((Now.Month - dateCheck.Month) + 12 * (Now.Year - dateCheck.Year)) > 0 
0
Date date1 = new Date(2011, 1, 1, 0, 0, 0); 
Date date2 = new Date(2011, 2, 1, 0, 0, 0); 

int result = DateCompare(date1, date2); 

nếu kết quả là < 0 thì date1 < date2
nếu kết quả là 0 thì date1 == date2
nếu kết quả là> 0 các date1> date2