2011-10-24 7 views
6

Tengo que verificar si una fecha (mes-año) es menos que la fecha real.cómo comparar mes-año con DateParse

sé cómo hacerlo únicamente con los meses o años, como

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

o

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

pero ¿cómo puedo comprobar directamente si mismo mes del año es de menos de now.month- ahora.año?

EDITAR

Lo que tengo que hacer es, por ejemplo, para comprobar si 10-2011 (DateTime.Now.Month-DateTime.Now.Year) está entre 01-2011 y 04-2012. ..

+0

¿Qué pasa con lo que tienes ahora? – Oded

+0

Will 'Parse' siempre funcionará para usted? analizarlo una vez y luego jugar con los valores de la instancia analizada, sería más simple – V4Vendetta

+0

por ejemplo, tengo que comprobar si 10-2011 (ahora) es entre 01-2011 y 04-2012 ... – markzzz

Respuesta

5

Si los años son los mismos, comparar los meses, si los años no son los mismos, el año debe ser más pequeño que ahora:

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

ACTUALIZACIÓN:

para comprobar si yourDate es, en cierto intervalo de tiempo, utilice este:

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

He actualizado mi objetivo. No funcionará con este código. Lo siento, no estaba claro :) Espero que ahora entiendas lo que estoy buscando ... – markzzz

+0

@markzzz: Por favor, mira la actualización. –

+0

Sé cómo hacer esto con un solo mes o año. Pero no es lo que pregunté :) Es si puedo verificar directamente el pari-año del año ... – 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) 

Segunda opción:

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; 

Tercera opción (más "vieja escuela" tal vez)

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

si el resultado es < 0 entonces fecha1 < la fecha 2
si el resultado es 0, entonces fecha1 == fecha2
si el resultado es> 0 la fecha1> fecha2