以字符串格式对日期列表进行排序
本文关键字:排序 列表 日期 字符串 格式 | 更新日期: 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();