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

本文关键字:排序 列表 日期 字符串 格式 | 更新日期: 2023-09-27 18:26:21

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

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

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

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

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

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

据我所知:

Week 2.2012为"2012年第二周"=2012年1月15日

Half 2.2015是"2015年的六个月"=2015年7月1日(但不太确定"一半"——它的含义可能略有不同)

Quarter 3.2005为"2005年第三季度"=2005年10月1日

等等

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

正如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();