繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM