以字符串格式对日期列表进行排序

时间:2015-12-10 12:11:31

标签: c# .net list sorting

我有一些字符串元素列表,如下所示:

{ Week 2.2012, Week 45.2014, Week 12.2011, ...}
{ Half 1.2013, Half 2.2015, Half 1.2010 ...}
{ Quarter 3.2005, Quarter 4.2010, Quarter 2.2011, ...}

知道这些字符串值无法解析为DateTime(?),我该如何对列表进行排序?

预期结果:

{ Week 12.2011, Week 2.2012, Week 45.2014, ...}
{ Half 1.2010, Half 1.2013, Half 2.2015, ...}
{ Quarter 3.2005, Quarter 4.2010, Quarter 2.2011, ...}

4 个答案:

答案 0 :(得分:3)

使用自定义逻辑创建IComparer的实现,并将其传递给List.Sort方法。

答案 1 :(得分:0)

对于这个解决方案,我想创建一个返回日期的日期字符串解析器。下一步,你可以使用日期时间的元组排序列表。

答案 2 :(得分:0)

正如Andy所说,您可以使用linq:

对这些数据进行排序
var sorted = list.Select(x => x.Split(' ', '.'))
    .OrderBy(x => int.Parse(x[2])).ThenBy(x => int.Parse(x[1]))
    .Select(x => $"{x[0]} {x[1]}.{x[2]}") //or string.Format("{0} {1}.{2}", x[0], x[1], x[2])
    .ToList();

答案 3 :(得分:0)

实际上,看起来这些字符串可以解析为DateTime

据我所知:

Week 2.2012是“2012年第二周”= 2012年1月15日

Half 2.2015是“2015年的六个月”= 2015年7月1日(虽然不太确定“一半” - 它的含义可能略有不同)

Quarter 3.2005是“2005年第三季度”= 2005年10月1日

等等。

因此,您可以解析这些值,将它们转换为DateTime并对列表进行排序。