2011-10-24 12 views
6

Muszę sprawdzić, czy data (miesiąc-rok) jest minus niż faktyczna data.jak porównać miesiąc-rok z DateParse

wiem jak to zrobić tylko z jednego miesiąca lub roku, jak

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

lub

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

ale jak mogę sprawdzić bezpośrednio, czy miesiąc-rok jest minus niż now.month- teraz.rok?

EDIT

Co muszę zrobić to, na przykład, aby sprawdzić, czy 10-2011 (DateTime.Now.Month-DateTime.Now.Year) wynosi od 01-2011 i 04-2012. ..

+0

Co się stało z tym, co masz teraz? – Oded

+0

Czy "Parsowanie" zawsze będzie działać dla ciebie? parsuj go raz, a następnie baw się z wartościami z analizowanej instancji, na przykład byłoby prostsze – V4Vendetta

+0

, na przykład, muszę sprawdzić, czy 10-2011 (teraz) jest między 01-2011 a 04-2012 ... – markzzz

Odpowiedz

5

Jeżeli roku są takie same, porównaj miesięcy, jeśli rok nie są takie same, twój rok musi być mniejszy niż teraz:

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:

Aby sprawdzić, czy yourDate jest w pewnym przedziale czasowym, użyj tego:

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

Zaktualizowałem swój cel. To nie zadziała z tym kodem. Niestety, nie było jasne :) Mam nadzieję, że teraz rozumiesz, czego szukam ... – markzzz

+0

@markzzz: Zobacz aktualizację. –

+0

Wiem, jak to zrobić za pomocą jednego miesiąca lub roku. Ale nie o to pytam :) Czy mogę sprawdzić bezpośrednio pari miesiąc-rok ... – 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) 

Druga opcja:

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; 

trzecia opcja (bardziej "starej szkoły" być może)

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); 

jeśli wynik jest < 0 Then date1 < date2
jeśli wynik jest 0 następnie date1 == date2
jeśli wynik jest> 0 date1> date2