排序对象数组日期,其中日期为字符串数据类型c#

本文关键字:日期 字符串 数据类型 对象 数组 排序 | 更新日期: 2023-09-27 18:15:11

尝试对这些日期进行排序w

object[] Dates = pivotGridFieldDates.GetUniqueValues();

results of Dates

9/10/2015
9/11/2015
9/2/2015
9/20/2015
9/25/2015
9/7/2015
9/8/2015

日期格式根据文化偏好而更改,我想对这些对象数组日期进行排序....

where Datetype of "Dates"  is {Name = "String" FullName = "System.String"}

我的代码
object[] Dates = pivotGridFieldDates.GetUniqueValues();
string result;
List<string> list=new List<string>();
var map = new List<String>();
foreach (var value in Dates)
{
    string map1= Convert.ToString(value);
    DateTime newdate = DateTime.ParseExact(map1, culture.ShortDatePattern,
                CultureInfo.InvariantCulture);
    result = newdate.ToString("yyyyMMdd");
    map.Add(result);
}
map.Sort();

排序后,我如何将这个"映射"列表转换为对象[]周日期??

排序对象数组日期,其中日期为字符串数据类型c#

无需转换、排序和返回转换,您可以使用自定义比较委托进行排序而无需转换,如下所示:

Dates.Sort((lhs, rhs) => {
    var lhsDate = DateTime.ParseExact(Convert.ToString(lhs), culture.ShortDatePattern, CultureInfo.InvariantCulture);
    var rhsDate = DateTime.ParseExact(Convert.ToString(rhs), culture.ShortDatePattern, CultureInfo.InvariantCulture);
    return lhsDate.CompareTo(rhsDate);
});

您可以简单地使用OrderBy(或者OrderByDescending)来排序序列。也不需要单独的列表-只需Select执行转换,如:

var listOfSortedStringDates = Dates.Select(v => DateTime.ParseExact( // parse
       v.ToString(),  // ToString as we have objects
       culture.ShortDatePattern, CultureInfo.InvariantCulture))
   .OrderBy(x=>x) // sort
   .Select(newdate => newdate.ToString(culture.ShortDatePattern)) // back to string
   .ToList();

正如Matt Johnson指出的,你只需要在OrderBy中进行解析——不需要来回转换:

var listOfSortedStringDates = Dates
   .OrderBy(v => DateTime.ParseExact(
          v.ToString(), culture.ShortDatePattern, CultureInfo.InvariantCulture))
   .ToList();