通过文件csv名称过滤日期时间范围

时间:2016-06-15 05:23:24

标签: c#

我有一个csv文件列表,其命名约定在 yyyymmddhhmm .csv

>>> B.data = [1,2,3,4]
>>> B.append(5)
calling __getattr__ for this name: 'append'
>>> B.__getitem__(0)
calling __getattr__ for this name: '__getitem__'
1

如果今天的日期是2016年6月14日,我需要在昨天晚上7点到今天早上7点进行文件过滤

我需要使用文件名范围从2016年6月13日晚上7点到2016年6月14日上午7点实现这些csv

201606131800.csv
201606132000.csv
201606140100.csv
201606140300.csv
201606140500.csv
201606140700.csv
201606140800.csv

我写了今天选择的文件。 如何按日期进行过滤,包括昨天晚上7点到晚上11:59?

201606132000.csv
201606140100.csv
201606140300.csv
201606140500.csv
201606140700.csv

2 个答案:

答案 0 :(得分:0)

如果文件名和创建的DateTime相同,则可以使用以下代码获取List:

例如,名为201606132000.csv的文件的CreationTime为2016/06/13/ 20:00201606140500.csv2016/06/14/ 05:00

DateTime yesterdayTime = DateTime.Now.AddDays(-1).Date.AddHours(19);
DateTime TodayTime = DateTime.Now.Date.AddHours(7);
List<FileInfo> FilesBetween7To7 = Directory.GetFiles("your path here")
                                           .Select(x => new FileInfo(x))
                                           .Where(y => y.CreationTime > yesterdayTime && 
                                           y.CreationTime < TodayTime)
                                           .ToList();

或者您可以使用以下代码段与名称进行比较并选择文件;

DateTime yesterdayTime = DateTime.Now.AddDays(-1).Date.AddHours(19);
DateTime TodayTime = DateTime.Now.Date.AddHours(7);
List<string> fileList = Directory.GetFiles(csvpath, "*.csv").ToList();
List<string> FilesInTheRange = new List<string>();
DateTime fileTime;
foreach (string file in fileList)
{
    if (DateTime.TryParseExact(file.Replace(".csv",String.Empty), "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out fileTime))
    {
        if (fileTime >= yesterdayTime && fileTime <= TodayTime)
            FilesInTheRange.Add(file);
    }
}

FilesInTheRange将包含所需的文件

答案 1 :(得分:0)

这是一个未经测试的代码,但您可能希望使用TryParseExact并将文件名转换为datetime对象,并根据您的开始和结束日期时间进行比较。

string dateTimeFormat = "yyyyMMddHHmm";
string[] FileList = Directory.GetFiles(csvpath, DateTime.Today.ToString("yyyyMMdd") + "*.csv");
int startHour = 19; // 7 PM
int endHour = 7; // 7 AM
DateTime startDT = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 

DateTime.Now.Day - 1, startHour, 0, 0);
DateTime endDT = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, endHour, 0, 0);
foreach (var fileName in FileList)
{ 
    DateTime fileDT = DateTime.Min;
    if(DateTime.TryParseExact(fileName, dateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyle.None, out fileDT))
    {
        if(fileDT >= startDT && fileDT <= endDT)
        {
            \\file process code.
        }       
    }
}