我有一个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
答案 0 :(得分:0)
如果文件名和创建的DateTime相同,则可以使用以下代码获取List:
例如,名为201606132000.csv
的文件的CreationTime为2016/06/13/ 20:00
,201606140500.csv
为2016/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.
}
}
}