2012-07-26 18 views
5

Hey ¿cómo se puede hacer un partido de comparación de cadenas para una fecha determinada, DateTime.TryParseExact parece la opción más sensata, pero no estoy seguro de cómo construir el argumento en el método siguiente:método de comparación de cadenas DateTime.TryParseExact

public List<Dates> DateEqualToThisDate(string dateentered) 
{ 
    List<Dates> date = dates.Where(
     n => string.Equals(n.DateAdded, 
          dateentered, 
          StringComparison.CurrentCultureIgnoreCase)).ToList(); 
     return hiredate; 
} 
+0

Duplicar Posible de http://stackoverflow.com/questions/11660423/string-comparison-on-date-format-wont-work – MikeKulls

+0

referencia útil para personas que utilizan la sintaxis de consulta LINQ en su lugar http://stackoverflow.com/questions/9003697/how-to-i-use-tryparse-in-a-linq-query-of-xml-data –

Respuesta

13

Si conoce exactamente el formato de la fecha/hora (es decir, nunca cambia y no depende de la cultura o la configuración regional del usuario), puede usar DateTime.TryParseExact.

Por ejemplo:

cadena
DateTime result; 
if (DateTime.TryParseExact(
    str,       // The string you want to parse 
    "dd-MM-yyyy",     // The format of the string you want to parse. 
    CultureInfo.InvariantCulture, // The culture that was used 
            // to create the date/time notation 
    DateTimeStyles.None,   // Extra flags that control what assumptions 
            // the parser can make, and where whitespace 
            // may occur that is ignored. 
    out result))     // Where the parsed result is stored. 
{ 
    // Only when the method returns true did the parsing succeed. 
    // Therefore it is in an if-statement and at this point 
    // 'result' contains a valid DateTime. 
} 

El formato puede ser un completamente especificado custom date/time format (como dd-MM-yyyy), o una general format specifier (como g). Para este último, la cultura importa en cuanto a cómo se formatea la fecha. Por ejemplo, en los Países Bajos las fechas se escriben como 26-07-2012 (dd-MM-yyyy) mientras que en EE. UU. Las fechas se escriben como 7/26/2012 (M/d/yyyy).

Sin embargo, todo esto solo funciona cuando su cadena str contiene solo la fecha que desea analizar. Si tienes una cadena más grande con todo tipo de caracteres no deseados alrededor de la fecha, entonces primero tendrás que encontrar la fecha. Esto se puede hacer usando una expresión regular, que es un tema totalmente diferente en sí mismo. Parte de la información general sobre expresiones regulares (expresiones regulares) en C# se puede encontrar en here. Una referencia de expresión regular es here. Por ejemplo, se puede encontrar una fecha similar a d/M/yyyy usando la expresión regular \d{1,2}\/\d{1,2}\/\d{4}.

+0

+1 0 IMPRIMIR "Daniel" –

+0

10 GOTO ¿QUÉ? –

0

Otra forma de hacerlo es convertir su fecha de string a DateTime. Si es posible, mantendría DateAdded como DateTime.

Bellow es un código que se ejecuta en LINQPad

public class Dates 
{ 
    public string DateAdded { get; set; } 
} 

List<Dates> dates = new List<Dates> {new Dates {DateAdded = "7/24/2012"}, new Dates {DateAdded = "7/25/2012"}}; 

void Main() 
{ 
    DateEqualToThisDate("7/25/2012").Dump(); 
} 

public List<Dates> DateEqualToThisDate(string anything) 
{ 
    var dateToCompare = DateTime.Parse(anything); 

    List<Dates> hireDates = dates.Where(n => DateTime.Parse(n.DateAdded) == dateToCompare).ToList(); 

    return hireDates; 
}