Sort string list with dates in C#

前端 未结 6 1620
不知归路
不知归路 2020-12-31 07:00

I have a List with dates.
My list is:

{\"01/01/2013\",\"10/01/2013\",\"20/01/2013\"}

I want to sort the list

6条回答
  •  天命终不由人
    2020-12-31 08:00

    With linq:

    var list = new List {"01/01/2013", "10/01/2013", "20/01/2013"};
    var orderedList = list.OrderByDescending(x => DateTime.Parse(x)).ToList();
    

    UPDATE (according questions in comments):

    You can treat invalid dates like this (invalid date is there treated as default(DateTime)):

    var list = new List { "01/01/2013", "10/01/2013", "N/A" , "20/01/2013"  };
    var orderedList2 = list.OrderByDescending(x =>
                {
                    DateTime dt;
                    DateTime.TryParse(x, out dt);
                    return dt;
                });
    

    Or if you want to have invalid datetime as first item in the list:

    var orderedList3 = list.OrderByDescending(x =>
                {
                    DateTime dt;
                    if (!DateTime.TryParse(x, out dt)) return DateTime.MaxValue;
                    return dt;
                }); 
    

    You can also filter the invalid dates out:

    var filteredList = list.Where(x =>
                {
                    DateTime dt;
                    return DateTime.TryParse(x, out dt);
                }).Select(DateTime.Parse).OrderByDescending(x => x);
    

    Or even better:

    var filteredList = list.Select(x =>
            {
                DateTime dt;
                return new {valid = DateTime.TryParse(x, out dt), date = dt};
            }).Where(x => x.valid).Select(x => x.date).OrderByDescending(x => x);
    

提交回复
热议问题