统计当日6:00至次日6:00价格总和的代码实现疑问
不用分支逻辑,一段代码搞定跨天时段统计
嘿,不用写两个分支逻辑!咱们用一段简洁的代码就能搞定这个统计需求,不管你的程序是在当天6:00-24:00运行,还是次日00:01-6:00运行,都能精准计算目标24小时窗口的价格总和。
核心思路
我们不需要判断当前处于哪个时段,而是直接根据当前时间算出目标统计窗口的起始和结束时间:
- 如果当前时间≥6:00,统计窗口是「今日6:00 → 明日6:00」
- 如果当前时间<6:00,统计窗口是「昨日6:00 → 今日6:00」
可以用一行代码确定基准日期,再基于基准日期生成统一的时段范围,完全避免分支判断。
代码实现(C# + SQL)
var now = DateTime.Now; // 确定基准日期:当前时间≥6点则取今日,否则取昨日 var baseDate = now.Hour >= 6 ? now.Date : now.Date.AddDays(-1); // 生成统计时段:基准日6:00 到 基准日+1天的6:00 var startTime = baseDate.AddHours(6); var endTime = baseDate.AddDays(1).AddHours(6); // 执行参数化SQL查询(务必用参数化,避免SQL注入) var sqlQuery = @"SELECT SUM(Price) AS TotalPrice FROM YourTableName WHERE DateTimeColumn BETWEEN @StartTime AND @EndTime"; // 示例:用SqlCommand执行查询(根据你的ORM/数据库工具调整) // using (var conn = new SqlConnection(yourConnectionString)) // { // conn.Open(); // using (var cmd = new SqlCommand(sqlQuery, conn)) // { // cmd.Parameters.AddWithValue("@StartTime", startTime); // cmd.Parameters.AddWithValue("@EndTime", endTime); // var totalPrice = cmd.ExecuteScalar(); // // 处理统计结果 // } // }
为什么这能行?
这段代码的逻辑是先锁定统计窗口的基准日,再基于基准日生成固定的6:00到次日6:00范围,不管当前时间是在窗口的前半段还是后半段,都能自动匹配到正确的24小时区间,完全不需要分分支处理,逻辑更简洁,也减少了出错的可能。
另外,一定要用参数化查询,这是防止SQL注入的最佳实践,也能避免日期格式带来的问题。
内容的提问来源于stack exchange,提问作者Dhn
相关产品推荐
相关产品推荐

