2012-07-26 11 views
5

Hey, wie kann man tun, ein String-Vergleich Spiel für ein bestimmtes Datum, scheint DateTime.TryParseExact wie die sinnvolle Option, aber ich bin nicht sicher, wie das Argument in der folgenden Methode zu konstruieren:DateTime.TryParseExact Methode für String-Vergleich

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

Mögliche Duplizieren von http://stackoverflow.com/questions/11660423/string-comparison-on-date-format-wont-work – MikeKulls

+0

Nützliche Referenz für Personen, die stattdessen die LINQ-Abfragesyntax verwenden http://stackoverflow.com/questions/9003697/how-to-i-use-tryparse-in-a-linq-query-of-xml-data –

Antwort

13

Wenn Sie das Format des Datums/der Uhrzeit genau kennen (dh es ändert sich nie und hängt nicht von der Kultur oder dem Gebietsschema des Benutzers ab), können Sie DateTime.TryParseExact verwenden.

Zum Beispiel:

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. 
} 

Die Format-Zeichenkette eine vollständig spezifiziert werden kann custom date/time format (wie dd-MM-yyyy) oder ein general format specifier (wie g). Für letztere spielt die Kultur eine Rolle, wie das Datum formatiert wird. Zum Beispiel werden in den Niederlanden Daten als 26-07-2012 (dd-MM-yyyy) geschrieben, während in den USA Daten als 7/26/2012 (M/d/yyyy) geschrieben werden.

Dies funktioniert jedoch nur, wenn Ihre Zeichenfolge str nur das Datum enthält, das Sie analysieren möchten. Wenn Sie eine größere Zeichenfolge mit allen möglichen unerwünschten Zeichen um das Datum haben, müssen Sie zuerst das Datum dort finden. Dies kann mit einem regulären Ausdruck geschehen, der ein ganz anderes Thema an sich ist. Einige allgemeine Informationen zu regulären Ausdrücken (Regex) in C# finden Sie unter here. Eine Referenz für einen regulären Ausdruck lautet here. Zum Beispiel kann ein Datum ähnlich d/M/yyyy mit dem Regex \d{1,2}\/\d{1,2}\/\d{4} gefunden werden.

+0

+1 0 DRUCKEN "Daniel" –

+0

10 GOTO WAS? –

0

Eine andere Möglichkeit ist, Ihr Datum von string zu DateTime zu konvertieren. Wenn es möglich ist, würde ich DateAdded als DateTime behalten.

Bellow ist ein Code, der in LINQPad läuft

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; 
} 
Verwandte Themen