2012-07-26 13 views
5

Hej, jak można zrobić porównanie ciąg dopasowanie do danego dnia, DateTime.TryParseExact wydaje się rozsądną opcją, ale nie jestem pewien, jak skonstruować arguement w poniższy sposób:DateTime.TryParseExact metoda porównania ciągów

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

Możliwa duplikat http://stackoverflow.com/questions/11660423/string-comparison-on-date-format-wont-work – MikeKulls

+0

Przydatne odniesienia dla ludzie używający składni zapytania LINQ zamiast: http://stackoverflow.com/questions/9003697/how-to-i-use-tryparse-in-a-linq-query-of-xml-data –

Odpowiedz

13

Jeśli znasz dokładnie format daty/czasu (tj. Nigdy się nie zmienia i nie zależy to od kultury lub ustawień regionalnych użytkownika), możesz użyć DateTime.TryParseExact.

Na przykład

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

format sznurek może być całkowicie określona custom date/time format (np dd-MM-yyyy) lub general format specifier (np g). W przypadku tej ostatniej kultura ma znaczenie dla sformatowania daty. Na przykład w Holandii daty są zapisywane jako 26-07-2012 (dd-MM-yyyy), podczas gdy w USA daty są zapisywane jako 7/26/2012 (M/d/yyyy).

Jednak wszystko działa tylko wtedy, gdy ciąg znaków str zawiera tylko datę, którą chcesz przeanalizować. Jeśli masz większy ciąg z różnymi rodzajami niechcianych znaków w okolicy daty, musisz najpierw znaleźć datę. Można to zrobić za pomocą wyrażenia regularnego, które jest zupełnie innym tematem samym w sobie. Niektóre ogólne informacje na temat wyrażeń regularnych (regex) w języku C# można znaleźć here. Odwołanie do wyrażenia regularnego to here. Na przykład datę podobną do d/M/yyyy można znaleźć za pomocą polecenia regex \d{1,2}\/\d{1,2}\/\d{4}.

+0

+1 0 DRUKUJ "Daniel" –

+0

10 GOTO CO "? –

0

Innym sposobem wykonania tej czynności jest zamiana daty z string na DateTime. Jeśli to możliwe, zachowam DateAdded jako DateTime.

Poniżej znajduje się kod, który działa w 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; 
} 
Powiązane problemy