[英]I want to get data by start date, start time and end date, end time
我创建了一个应用程序,我正在使用链接标签选项从 .csv 文件获取数据,我想按开始日期、开始时间和结束日期、结束时间获取数据。
我尝试只使用一个日期、开始时间和结束时间,例如 24/6/2019 10:00:00 AM 到 23:00:00 PM
private Task<List<Tag>> SearchCSV()
{
return Task.Run<List<Tag>>(() => {
var t = new List<Tag>();
if (string.IsNullOrWhiteSpace(filePath) || !File.Exists(filePath))
return new List<Tag>();
using (FileStream fileStream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
fileStream.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(fileStream))
{
while (!sr.EndOfStream)
{
string[] row = Regex.Split(sr.ReadLine(), ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
if (!DateTime.TryParse(row[0] as string, out DateTime date))
continue;
DateTime.TryParse(row[1] as string, out DateTime time);
DateTime dateTime = date.Add(new TimeSpan(time.Hour, time.Minute, time.Second));
if (dateTime >= startDate && dateTime <= endDate) { }
// t.Add(new Tag(dateTime, decimal.TryParse(row[selectedTankIndex + 2], out decimal tagValue) ? tagValue : 0));
}
}
}
return t;
});
}
我希望从 24/6/2019 10:00:00 AM 到 7/8/2019 23:00:00 PM 获取数据。
我该怎么做,请帮助我,在此先感谢。
如果可以,我建议您使用 TextFieldParser 类。 它在 VB 命名空间中,但仍然可以从 C# 引用,它将消除对可能有问题且难以阅读的正则表达式的需要:
using Microsoft.VisualBasic.FileIO;
...
using (FileStream fileStream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var sr = new TextFieldParser(fileStream))
{
while (!sr.EndOfData)
{
string[] row = sr.ReadFields();
if (!DateTime.TryParse(row[0] as string, out DateTime date))
continue;
DateTime.TryParse(row[1] , out DateTime time);
//etc
}
}
}
此外,如果您的日期可以采用不同的格式,您可以使用 TryParseExact,它可以采用多种不同的格式:
DateTime.TryParseExact(row[0], new []{"dd/mm/yyyy hh:mm:ss tt", "d/m/yyyy hh:mm:ss tt", "d/mm/yyyy hh:mm:ss tt", "dd/m/yyyy hh:mm:ss tt" }, CultureInfo.InvariantCulture,DateTimeStyles.None,out var result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.