Esto es similar a @ respuesta, pero en vez de analizar cada fecha de Jeffrey, primero se encuentra el mínimo y el máximo fechas en la comparación de sus valores de cadena, y luego analiza los valores al final.
// This method handles the date comparisons
private int WeirdComparer(string strDate1, string strDate2)
{
int res = string.Compare(strDate1, 6, strDate2, 6, 4);
if (res == 0)
res = string.Compare(strDate1, 3, strDate2, 3, 2);
if (res == 0)
res = string.Compare(strDate1, 0, strDate2, 0, 2);
return res;
}
public void FindMinAndMaxDates(IList<string> strDates, out DateTime minDate, out DateTime maxDate)
{
string min = "99.99.9999";
string max = "00.00.0000";
foreach (string strDate in strDates)
{
if (WeirdComparer(strDate, min) < 0)
min = strDate;
if (WeirdComparer(strDate, max) > 0)
max = strDate;
}
minDate = DateTime.ParseExact(min, "dd.MM.yyyy", null);
maxDate = DateTime.ParseExact(max, "dd.MM.yyyy", null);
}
De hecho, comencé a escribir el mismo método, no creo que se pueda hacer mucho para superar el tiempo 'O (n)' a menos que lo pongas en algún tipo de estructura de montón que te permita resolverlo en 'O (logN)' tiempo, pero luego cambiaría ciclos de procesador que son increíblemente baratos para el doble de almacenamiento de memoria que es menos barato comparativamente. –
@Jeffrey: ¡Tenga cuidado con la globalización del formato de fecha y hora para las fechas representadas como cadenas! – t0mm13b
@ tommieb75 - Sí, pensé en eso, pero no lo incluí, porque estaba siendo flojo. Esa parte puede tomarse de la respuesta de Mark Byers. Le daré un voto favorable para el artículo de ParseExact, y lo llamaré hecho. :-) –