我想按开始日期,开始时间和结束日期,结束时间获取数据

时间:2019-08-16 06:15:55

标签: c#

我创建了一个应用程序,我正在使用链接标签选项从.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

1 个答案:

答案 0 :(得分:0)

如果可以的话,我建议您使用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);