You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

筛选昨日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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:21:49