筛选昨日13点至今文件时Where中AddHours过滤失效问题
解决筛选昨日13点至当前时刻.xls文件的过滤失效问题
我来帮你搞定这个问题!你遇到的情况其实是个常见的时间比较陷阱——当你加上AddHours(13)后过滤失效,核心问题出在时间维度不匹配上。
问题根源
你现在的代码里,左边用了new FileInfo(file).CreationTime.Date,这个操作会把文件的创建时间截断到「日期」维度(比如2024-05-19 00:00:00),而右边的DateTime.Now.Date.AddDays(-1).AddHours(13)是一个带具体小时的时间(比如2024-05-19 13:00:00)。
当你拿「昨日00:00」和「昨日13:00」做大于等于比较时,所有昨日创建的文件的CreationTime.Date都是2024-05-19 00:00:00,必然小于2024-05-19 13:00:00,所以过滤结果为空;而去掉AddHours(13)后,右边变成了2024-05-19 00:00:00,此时比较日期的话,所有昨日及之后创建的文件都会被选中,看起来正常,但其实逻辑不符合你“昨日13点到现在”的需求。
正确的代码实现
你需要直接用完整的创建时间(包含小时/分钟/秒)和准确的时间范围做比较:
// 先定义好准确的时间区间 DateTime startTime = DateTime.Now.Date.AddDays(-1).AddHours(13); // 昨日13:00:00 DateTime endTime = DateTime.Now; // 当前时刻 // 筛选创建时间在区间内的xls文件 string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls") .Where(file => new FileInfo(file).CreationTime >= startTime && new FileInfo(file).CreationTime <= endTime) .ToArray();
额外优化建议
- 如果需要同时包含
.xlsx文件,可以把搜索模式改成"*.xls*" - 可以优化一下
FileInfo的实例化,避免重复创建对象:
string[] files = Directory.GetFiles(FBD.SelectedPath, "*.xls") .Select(file => new FileInfo(file)) .Where(info => info.CreationTime >= startTime && info.CreationTime <= endTime) .Select(info => info.FullName) .ToArray();
内容的提问来源于stack exchange,提问作者user2839067
相关产品推荐
相关产品推荐

