You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#获取最近7天数据遇问题:早8点执行时无数据返回求助

问题分析与解决方案

看起来你遇到的问题是时间范围边界定义不一致导致的,咱们来拆解一下:

currentDate是早上8点时,你的代码里:

  • dateRange.From被设置为当前日期的00:00:00减去7天(比如今天是2024-05-20 08:00:00,From就是2024-05-13 00:00:00)
  • dateRange.To直接用了DateTime.Now也就是2024-05-20 08:00:00

但你数据库里当天的记录时间是09:00:00,这个时间晚于To的8点,自然会被过滤掉。而平时如果当前时间在9点之后,To的时间会晚于数据库里的09:00,所以能正常查到数据。

下面给你几个针对性的解决方案,你可以根据业务需求选择:

方案1:覆盖当天所有时间(适合需要完整自然日数据的场景)

如果你的需求是获取最近7个自然日的所有数据(不管当前几点),可以把To设置为当前日期的次日00:00:00,这样能确保包含当天的所有时刻:

var currentDate = DateTime.Now.Date; // 直接获取当前日期的00:00:00
dateRange.From = currentDate.AddDays(-7);
dateRange.To = currentDate.AddDays(1); // 次日0点,完美覆盖当天所有数据

注意:数据库查询时建议用Date >= @From AND Date < @To(小于而非小于等于),这样不会误包含次日0点的记录。

方案2:严格的7天时间窗口(适合需要最近24*7小时数据的场景)

如果你的需求是获取当前时间往前推7天的所有数据(比如现在8点,就取7天前8点到现在8点的范围),直接让From和To都基于当前完整时间计算:

var currentDate = DateTime.Now;
dateRange.From = currentDate.AddDays(-7);
dateRange.To = currentDate;

这个方案逻辑更严谨,完全匹配「最近7天」的时间窗口定义。

方案3:将To设为当天深夜(兼容性强的传统方案)

如果你习惯用自然日的截止时间,也可以把To设为当天的23:59:59.999,确保覆盖当天所有时刻:

var currentDate = DateTime.Now;
dateRange.From = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day).AddDays(-7);
dateRange.To = new DateTime(currentDate.Year, currentDate.Month, currentDate.Day, 23, 59, 59, 999);

不过这种方式要注意DateTime的精度问题,部分数据库可能会有毫秒级的偏差,所以还是方案1的「次日0点+小于比较」更稳妥。


内容的提问来源于stack exchange,提问作者Bellmee Store

火山引擎 最新活动