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

ASP.NET教程 2025-08-22

目录

  • 技术栈
  • 代码实现
    • DateTimeHelper 类
    • 调用示例
  • 总结

    在现代Web应用程序中,处理日期和时间是一个常见的需求。无论是记录日志、生成报告还是进行数据分析,正确处理日期和时间对于确保数据的准确性和一致性至关重要。本文将详细介绍如何使用ASP.NET Core和C#构建一个高效的时间日期帮助类,并展示其使用方法。

    技术栈

    .NET 8: 提供强大的API开发框架。

    C#: 用于编写高效的业务逻辑。

    代码实现

    DateTimeHelper 类

    我们创建了一个名为DateTimeHelper的帮助类,它提供了多种日期时间相关的功能,包括格式化日期时间和调整查询时间范围。

    1. 常量定义

    首先,我们定义了一些常用的常量,用于表示不同的时间跨度,例如1天、7天、30天等。

    namespace MES.Core.Helpers
    {
        /// summary
        /// 日期时间帮助类,提供日期时间格式化及查询范围调整功能
        /// /summary
        public class DateTimeHelper
        {
            /// summary
            /// 日期时间格式:yyyy-MM-dd HH:mm:ss
            /// /summary
            public const string DateTimeFormat = @"yyyy-MM-dd HH:mm:ss";
    
            /// summary
            /// 1天的时间跨度
            /// /summary
            public const int Day1 = 1;
    
            /// summary
            /// 7天的时间跨度
            /// /summary
            public const int Day7 = 7;
    
            /// summary
            /// 15天的时间跨度
            /// /summary
            public const int Day15 = 15;
    
            /// summary
            /// 30天的时间跨度
            /// /summary
            public const int Day30 = 30;
    
            /// summary
            /// 60天的时间跨度
            /// /summary
            public const int Day60 = 60;
    
            /// summary
            /// 90天的时间跨度
            /// /summary
            public const int Day90 = 90;
    

    2. 获取当前时间

    GetThisDateTime方法用于获取当前时间并将其格式化为指定的格式。

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

    3. 调整查询时间范围

    AdjustQueryRange方法根据提供的开始时间和结束时间调整查询范围,以确保查询结果在合理的范围内。

           /// summary
            /// 根据提供的开始时间和结束时间调整查询范围
            /// /summary
            /// param name="start_time"开始时间/param
            /// param name="end_time"结束时间/param
            /// param name="timeHorizon"时间范围,默认30天/param
            /// returns包含调整后的开始和结束时间的元组/returns
            public static TupleDateTime, DateTime 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);
            }
        }
    }
    

    调用示例

    以下是如何调用AdjustQueryRange方法的示例:

    // 定义开始时间和结束时间
    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}");
    

    总结

    通过上述步骤,我们实现了一个高效的时间日期帮助类,能够方便地格式化日期时间和调整查询时间范围。该类不仅提高了代码的可读性和维护性,还确保了日期时间处理的一致性和准确性。