2012-07-26 41 views
5

Hey làm thế nào bạn có thể làm một trận chuỗi so sánh cho một ngày nhất định, DateTime.TryParseExact có vẻ như lựa chọn hợp lý nhưng tôi không chắc chắn làm thế nào để xây dựng các đối số trong phương thức dưới đây:phương pháp DateTime.TryParseExact để so sánh chuỗi

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

Có thể trùng lặp của http://stackoverflow.com/questions/11660423/string-comparison-on-date-format-wont-work – MikeKulls

+0

tài liệu tham khảo hữu ích cho những người sử dụng cú pháp truy vấn LINQ thay vì http://stackoverflow.com/questions/9003697/how-to-i-use-tryparse-in-a-linq-query-of-xml-data –

Trả lời

13

Nếu bạn biết định dạng ngày/giờ chính xác (tức là nó không bao giờ thay đổi và không phụ thuộc vào văn hóa hoặc ngôn ngữ của người dùng), thì bạn có thể sử dụng DateTime.TryParseExact.

Ví dụ:

chuỗi
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. 
} 

Định dạng có thể là một quy định hoàn toàn custom date/time format (như dd-MM-yyyy), hoặc một general format specifier (như g). Đối với sau này, văn hóa quan trọng như thế nào ngày được định dạng. Ví dụ: tại các ngày ở Hà Lan được viết là 26-07-2012 (dd-MM-yyyy) trong khi ngày ở Hoa Kỳ được viết là 7/26/2012 (M/d/yyyy).

Tuy nhiên, tất cả điều này chỉ hoạt động khi chuỗi str của bạn chỉ chứa ngày bạn muốn phân tích cú pháp. Nếu bạn có một chuỗi lớn hơn với tất cả các loại ký tự không mong muốn xung quanh ngày, sau đó bạn sẽ phải tìm ngày trong đó đầu tiên. Điều này có thể được thực hiện bằng cách sử dụng một biểu thức chính quy, đó là một chủ đề hoàn toàn khác trong chính nó. Một số thông tin chung về biểu thức chính quy (regex) trong C# có thể được tìm thấy here. Tham chiếu biểu thức chính quy là here. Ví dụ: một ngày tương tự như d/M/yyyy có thể được tìm thấy bằng cách sử dụng regex \d{1,2}\/\d{1,2}\/\d{4}.

+0

+1 0 IN "Daniel" –

+0

10 GOTO GÌ? –

0

Một cách khác để thực hiện việc này là chuyển đổi ngày của bạn từ string thành DateTime. Nếu có thể tôi sẽ giữ DateAddedDateTime.

Bellow là một mã chạy trong 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; 
} 
Các vấn đề liên quan