商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 使用.NET8构建一个高效的时间日期帮助类

使用.NET8构建一个高效的时间日期帮助类

  发布于2026-07-23 阅读(0)

扫一扫,手机访问

在如今的Web开发中,处理日期和时间几乎无处不在——日志记录、报表生成、数据分析,哪一样都离不开它。要是搞不对时区、格式或者查询范围,数据就很容易出岔子。所以,一个靠谱的日期时间帮助类,能省去不少重复劳动,也让代码更清爽。下面我们就基于.NET 8和C#,手把手构建一个这样的工具类,并看看怎么用起来。

技术栈

整个实现依赖两个核心组件:

  • .NET 8:提供现代化的API开发框架,性能与稳定性都有保障。
  • C#:用来编写简洁且高效的业务逻辑,语言本身对日期时间操作支持很完善。

代码实现

DateTimeHelper 类

我们封装了一个名为 DateTimeHelper 的帮助类,集中处理日期时间的格式化、当前时间获取,以及查询时间范围的自动调整。下面是具体实现。

1. 常量定义

先把常用的时间跨度定义成常量,这样后续用起来更直观,也方便维护。比如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;

2. 获取当前时间

GetThisDateTime 方法做的事情很简单:拿到当前系统时间,然后按我们定义的 DateTimeFormat 格式(yyyy-MM-dd HH:mm:ss)做一次格式化后再转回 DateTime 类型。这样就能保证返回的时间字符串精度统一,避免出现毫秒或时区不一致的问题。

        /// 
        /// 获取当前时间并格式化为指定格式
        /// 
        /// 格式化后的当前时间
        public static DateTime GetThisDateTime()
        {
            return Convert.ToDateTime(DateTime.Now.ToString(DateTimeFormat));
        }

3. 调整查询时间范围

AdjustQueryRange 方法是最核心的部分。它接收可选的开始时间和结束时间,以及一个时间跨度参数(默认30天),然后自动调整,让查询区间既合理又不越界。逻辑分几种情况:

  • 如果只传了开始时间,就把结束时间设为开始时间加上指定跨度,同时确保不超过当前时间加1天。
  • 如果只传了结束时间,就把开始时间设为结束时间减去指定跨度。
  • 如果两个都传了,就按传入的值,但保证结束时间不超过开始时间加上跨度。
  • 如果两个都没传,就用默认值:开始时间为当前时间减去跨度,结束时间为当前时间加1天。

最后返回一个 Tuple,方便解构使用。

        /// 
        /// 根据提供的开始时间和结束时间调整查询范围
        /// 
        /// 开始时间
        /// 结束时间
        /// 时间范围,默认30天
        /// 包含调整后的开始和结束时间的元组
        public static Tuple AdjustQueryRange(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:00Adjusted End Time: 2023-10-31 00:00:00,完全符合预期。

总结

通过这个 DateTimeHelper,我们实现了两个关键功能:统一的时间格式化和灵活的查询范围自动调整。它把常见的日期时间操作收拢到一个类里,不仅让业务代码更干净,也避免了各处分散处理带来的格式不一致和边界条件遗漏。对于需要频繁处理时间区间的查询场景(比如报表、日志搜索),这个工具类能显著提升开发效率和代码可维护性。

本文转载于:https://www.jb51.net/aspnet/334988ivb.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注