我有一个带有时间戳字符串的System.Collections.Generic.List,如下所示:
等
(该列表保证按时间顺序排列,尽管有奇怪的分隔符,但它按照您的预期读取,例如Day-Month-Year_24hr.Minutes-Seconds)
我有两个DateTime对象:startDateTime,endDateTime
我想处理列表,以便处理后剩下的所有内容都是那些时间戳落在我的两个DateTime对象定义的范围内的条目。
鉴于此,我认为我有两个问题:
如何转换" 10-Dec-2013_14.20-42"进入DateTime
如何在列表中删除项目?
我想我可以管理剩下的过程。
感谢所有帮助。感谢。
答案 0 :(得分:3)
这会获取字符串的日期部分,并使用DateTime.ParseExact
将其转换为有效的DateTime
(使用24小时格式,因为其中没有上午或下午字符串)
结果是一个新列表,其中只包含日期范围之间的字符串。
var filteredList
= (from o in originalList
let dt = DateTime.ParseExact(
o.Substring(0, o.IndexOf(":")),
"dd-MMM-yyyy_HH.mm-ss", CultureInfo.CurrentCulture)
where dt >= startDateTime
&& dt <= endDateTime
select o).ToList();
要从原始列表中删除项目:
originalList.RemoveAll(
x => (from o in originalList
let dt = DateTime.ParseExact(
o.Substring(0, o.IndexOf(":")),
"dd-MMM-yyyy_HH.mm-ss", CultureInfo.CurrentCulture)
where dt >= startDateTime
&& dt <= endDateTime
select o).Contains(x));
请注意,如果您的任何行上的输入无法转换为有效日期,ParseExact
将抛出异常。
答案 1 :(得分:1)
要解析日期,请使用DateTime.ParseExact()
方法。
如果您有通用列表,则它有一个方法List<T>.RemoveAll()
,可以满足您的需求。