为什么要存储DateTime
as String
?为什么你有一个List<String>
which contains DateTime
s?您应该始终使用最合适的数据类型并最后将其转换为字符串。
但是,这应该有效:
string dateFormat = "dd-MM-yyyy HH:mm:ss.fff";
IEnumerable<string> filtered = strings
.Select(str => new { str, dt = DateTime.ParseExact(str, dateFormat, CultureInfo.InvariantCulture) })
.Where(x => x.dt >= start && x.dt <= end)
.OrderBy(x => x.dt) // if you want to order by the datetime value
.Select(x => x.str);
此查询获取每个字符串并用于DateTime.ParseExact
将其转换为DateTime
. 然后它创建一个匿名类型( new{ .... }
),它有两个属性,原始string
的和由属性和你的开始值和结束值DateTime
过滤的和。剩余项目按日期时间(奖金)排序。最后选择了字符串,因为我假设这是您想要的结果。Enumerable.Where
DateTime
如果您需要具体化查询,您可以使用ToList
或简单的foreach
.
foreach(string strDate in filtered)
{
Console.WriteLine( strDate );
}
根据您的评论编辑:
好的,那么当我的主行看起来像这样 05-04-2011 12:42:04.160,Event dssd(23).dfgg[2] 1 xx:3332,还有一些文本时,如何将其保存为 Datetime。我像这样分隔这些行并将每个部分保存到字符串数组 string[] _columns = line.Split(",".ToCharArray()); 中。如何将第一部分保存为日期时间并将其余部分保存为字符串?
string dateFormat = "dd-MM-yyyy HH:mm:ss.fff";
string[] lines = new[]{"05-04-2011 12:42:04.160,Event dssd(23).dfgg[2] 1 xx:3332,some more text"};
var lineIfos = lines.Select(s => s.Split(','))
.Select(split => new{
date = DateTime.ParseExact(split[0].Trim(), dateFormat, CultureInfo.InvariantCulture),
rest = string.Join(",", split.Skip(1))
})
.Where(x => x.date >= start && x.date <= end)
.OrderBy(x => x.date);
foreach (var x in lineIfos)
Console.WriteLine("date:{0} rest of the line:{1}"
,x.date.ToString("d")
,x.rest);