从基于DateTime的列表中删除项目的最佳方法
本文关键字:删除项目 最佳 方法 列表 DateTime | 更新日期: 2023-09-27 18:01:21
我有一个时间戳字符串的System.Collections.Generic.List,看起来像这样:
- 14-Oct-2013_10.36-34: JobID=1234, Status=FAILED.
- 14-Nov-2013_11.12-36: JobID=2345, Status=SUCCESS.
- 10-Dec-2013_14.20-42: JobID=3456, Status=SUCCESS.
等。
(该列表保证是按时间顺序排列的,尽管有奇怪的分隔符,但它读起来像您可能期望的那样,例如Day-Month-Year_24hr。Minutes-Seconds)
我有两个DateTime对象:startDateTime, endDateTime
我想处理这个列表,以便处理后剩下的所有条目的时间戳都在我的两个DateTime对象定义的范围内。
鉴于此,我想我有两个问题:
-
如何将"10-Dec-2013_14.20-42"转换为日期时间
-
我如何从列表中删除项目,因为我正在运行它?
我想我能应付剩下的过程。
感谢您的帮助。谢谢。
这将获取字符串的日期部分并使用DateTime.ParseExact
将其转换为有效的DateTime
(使用24小时格式,因为字符串中没有am或pm)。
结果是一个新列表,其中只有在您的日期范围内的字符串。
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
将抛出异常。
使用DateTime.ParseExact()
方法解析日期。
如果你有一个通用列表,它有一个适合你需要的方法List<T>.RemoveAll()
。