2011-07-06 879 views
39

Tengo dos fechas. Se ingresa una fecha y la otra es DateTime.Now. Los tengo en formato mm/dd/yyyy, incluso puede ser formato m/d/aa también. Ambas fechas son nulables, es decir, datatype es DateTime?, ya que puedo pasar nulo también como entrada. Ahora quiero comparar las dos fechas solo con el formato mm/dd/yyyy o m/d/yy.Cómo comparar las fechas en C#

Respuesta

63

Si tiene sus fechas en las variables DateTime, no tienen tienen un formato.

Puede usar la propiedad Date para devolver un valor DateTime con la porción de tiempo configurada a la medianoche. Por lo tanto, si usted tiene:

DateTime dt1 = DateTime.Parse("07/12/2011"); 
DateTime dt2 = DateTime.Now; 

if(dt1.Date > dt2.Date) 
{ 
    //It's a later date 
} 
else 
{ 
    //It's an earlier or equal date 
} 
+9

Mejor uso 'DateTime.Today' que' DateTime.Now.Date' si no necesita horas, minutos, etc. –

+0

@Piotr - buen punto - a menos que también necesiten acceder a horas/minutos/segundos como otra parte de la obra. –

+1

@Damien_The_Unbeliever ¿Funcionará esto para cualquier formato de fecha? ¿Qué pasa con 'aaaa/MM/dd'? – Arbaaz

7

En primer lugar, entender que DateTime objetos no están formateados. Simplemente almacenan el año, mes, día, hora, minuto, segundo, etc. como un valor numérico y el formato se produce cuando desea representarlo como una cadena de alguna manera. Puede comparar objetos DateTime sin formatearlos.

Para comparar una fecha de entrada con DateTime.Now, es necesario analizar en primer lugar la entrada en una fecha y luego comparar sólo las partes Año/Mes/Día:

DateTime inputDate; 
if(!DateTime.TryParse(inputString, out inputDate)) 
    throw new ArgumentException("Input string not in the correct format."); 

if(inputDate.Date == DateTime.Now.Date) { 
    // Same date! 
} 
19

Si tiene fecha en DateTime variable de entonces su un objeto DateTime y no contiene ningún formato. La fecha formateada se expresa como string cuando llama al método DateTime.ToString y proporciona el formato en él.

Digamos que tiene dos DateTime variable, se puede utilizar el método de comparación para comparación,

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0); 
DateTime date2 = new DateTime(2009, 8, 2, 0, 0, 0); 
int result = DateTime.Compare(date1, date2); 
string relationship; 

if (result < 0) 
    relationship = "is earlier than"; 
else if (result == 0) 
    relationship = "is the same time as";   
else 
    relationship = "is later than"; 

fragmento de código tomado de msdn.

Cuestiones relacionadas