发布于2026-07-23 阅读(0)
扫一扫,手机访问
在如今的Web开发中,处理日期和时间几乎无处不在——日志记录、报表生成、数据分析,哪一样都离不开它。要是搞不对时区、格式或者查询范围,数据就很容易出岔子。所以,一个靠谱的日期时间帮助类,能省去不少重复劳动,也让代码更清爽。下面我们就基于.NET 8和C#,手把手构建一个这样的工具类,并看看怎么用起来。
整个实现依赖两个核心组件:
我们封装了一个名为 DateTimeHelper 的帮助类,集中处理日期时间的格式化、当前时间获取,以及查询时间范围的自动调整。下面是具体实现。
先把常用的时间跨度定义成常量,这样后续用起来更直观,也方便维护。比如1天、7天、30天、60天、90天,都是业务中很常见的查询范围。
namespace MES.Core.Helpers
{
///
/// 日期时间帮助类,提供日期时间格式化及查询范围调整功能
///
public class DateTimeHelper
{
///
/// 日期时间格式:yyyy-MM-dd HH:mm:ss
///
public const string DateTimeFormat = @"yyyy-MM-dd HH:mm:ss";
///
/// 1天的时间跨度
///
public const int Day1 = 1;
///
/// 7天的时间跨度
///
public const int Day7 = 7;
///
/// 15天的时间跨度
///
public const int Day15 = 15;
///
/// 30天的时间跨度
///
public const int Day30 = 30;
///
/// 60天的时间跨度
///
public const int Day60 = 60;
///
/// 90天的时间跨度
///
public const int Day90 = 90;
GetThisDateTime 方法做的事情很简单:拿到当前系统时间,然后按我们定义的 DateTimeFormat 格式(yyyy-MM-dd HH:mm:ss)做一次格式化后再转回 DateTime 类型。这样就能保证返回的时间字符串精度统一,避免出现毫秒或时区不一致的问题。
////// 获取当前时间并格式化为指定格式 /// ///格式化后的当前时间 public static DateTime GetThisDateTime() { return Convert.ToDateTime(DateTime.Now.ToString(DateTimeFormat)); }
AdjustQueryRange 方法是最核心的部分。它接收可选的开始时间和结束时间,以及一个时间跨度参数(默认30天),然后自动调整,让查询区间既合理又不越界。逻辑分几种情况:
最后返回一个 Tuple,方便解构使用。
////// 根据提供的开始时间和结束时间调整查询范围 /// /// 开始时间 /// 结束时间 /// 时间范围,默认30天 ///包含调整后的开始和结束时间的元组 public static TupleAdjustQueryRange(DateTime? start_time, DateTime? end_time, int timeHorizon = Day30) { // 默认设置开始时间为当前时间减去指定时间范围(默认30天) DateTime startTime = DateTime.Now.AddDays(-(timeHorizon - 1)); // 默认设置结束时间为当前时间加1天 DateTime endTime = DateTime.Now.AddDays(1); // 如果仅提供了开始时间 if (start_time != null && end_time == null) { startTime = (DateTime)start_time; // 确保结束时间在开始时间之后且不超过指定时间范围 if (startTime.AddDays(timeHorizon) < endTime) endTime = startTime.AddDays(timeHorizon); } // 如果仅提供了结束时间 if (start_time == null && end_time != null) { endTime = (DateTime)end_time; // 确保开始时间在结束时间之前且不超过指定时间范围 if (endTime.AddDays(-timeHorizon) < startTime) startTime = endTime.AddDays(-timeHorizon); } // 如果提供了开始和结束时间 if (start_time != null && end_time != null) { startTime = (DateTime)start_time; endTime = (DateTime)end_time; // 确保结束时间在开始时间之后且不超过指定时间范围 if (startTime.AddDays(timeHorizon) < endTime) endTime = startTime.AddDays(timeHorizon); } // 返回调整后的开始和结束时间 return Tuple.Create(startTime, endTime); } } }
来看看实际怎么用。假设我们想查2023年10月1日之后30天内的数据,但没给结束时间,那么调用 AdjustQueryRange 就会自动把结束时间推到10月31日(2023-10-01 + 30天)。代码写起来很简洁:
// 定义开始时间和结束时间
DateTime? startTime = new DateTime(2023, 10, 1);
DateTime? endTime = null;
// 调用方法调整时间范围
var (adjustStartTime, adjustEndTime) = DateTimeHelper.AdjustQueryRange(startTime, endTime, DateTimeHelper.Day30);
Console.WriteLine($"Adjusted Start Time: {adjustStartTime}");
Console.WriteLine($"Adjusted End Time: {adjustEndTime}");
输出结果会显示 Adjusted Start Time: 2023-10-01 00:00:00 和 Adjusted End Time: 2023-10-31 00:00:00,完全符合预期。
通过这个 DateTimeHelper,我们实现了两个关键功能:统一的时间格式化和灵活的查询范围自动调整。它把常见的日期时间操作收拢到一个类里,不仅让业务代码更干净,也避免了各处分散处理带来的格式不一致和边界条件遗漏。对于需要频繁处理时间区间的查询场景(比如报表、日志搜索),这个工具类能显著提升开发效率和代码可维护性。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8