时间帮助类

public class DateHelper
    {
        #region/// <summary>
        /// 获取时间所处周的第一天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetFirstDayOfWeek(DateTime date)
        {
            //星期一为第一天  
            var weekNow = Convert.ToInt32(date.DayOfWeek);

            //因为是以星期一为第一天,weekNow,要向前推6天。  
            weekNow = (weekNow == 0 ? (7 - 1) : (weekNow - 1));
            var dayDiff = (-1) * weekNow;

            //本周第一天  
            return date.AddDays(dayDiff);
        }

        /// <summary>
        /// 获取时间所处周的最后一天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetLastDayOfWeek(DateTime date)
        {
            //星期天为最后一天  
            var lastWeekDay = Convert.ToInt32(date.DayOfWeek);
            lastWeekDay = lastWeekDay == 0 ? (7 - lastWeekDay) : lastWeekDay;
            var lastWeekDiff = (7 - lastWeekDay);

            //本周最后一天  
           return date.AddDays(lastWeekDiff);
        }

        #endregion

        #region/// <summary>
        /// 获取时间所处月的第一天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetFirstDayOfMonth(DateTime date)
        {
            return date.AddDays(1 - date.Day);
        }

        /// <summary>
        /// 获取时间所处月的最后一天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetLastDayOfMonth(DateTime date)
        {
            return date.AddDays(1 - date.Day).AddMonths(1).AddDays(-1);
        }

        #endregion

        #region 季度

        /// <summary>
        /// 获取时间所处季度的第一天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetFirstDayOfQuarter(DateTime date)
        {
            return date.AddMonths(0 - (date.Month - 1) % 3).AddDays(1 - date.Day);
        }

        /// <summary>
        /// 获取时间所处季度的最后一天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetLastDayOfQuarter(DateTime date)
        {
            return date.AddMonths(0 - (date.Month - 1) % 3).AddDays(1 - date.Day).AddMonths(3).AddDays(-1);
        }

        #endregion

        #region 半年

        /// <summary>
        /// 获取所处时间半年的第一天(上半年或下半年)
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetFirstDayOfHalfYear(DateTime date)
        {
            if (date.Date < new DateTime(date.Year, 7, 1))
            {
                return new DateTime(date.Year, 1, 1);
            }
            return new DateTime(date.Year, 7, 1);
        }

        /// <summary>
        /// 获取所处时间半年的最后一天(上半年或下半年)
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetLastDayOfHalfYear(DateTime date)
        {
            if (date.Date < new DateTime(date.Year, 7, 1))
            {
                return new DateTime(date.Year, 7, 1).AddDays(-1);
            }
            return new DateTime(date.Year, 1, 1).AddYears(1).AddDays(-1);
        }

        #endregion

        #region/// <summary>
        /// 获取时间所处年的第一天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetFirstDayOfYear(DateTime date)
        {
            return new DateTime(date.Year, 1, 1);
        }

        /// <summary>
        /// 获取时间所处年的最后一天
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static DateTime GetLastDayOfYear(DateTime date)
        {
            return new DateTime(date.Year, 1, 1).AddYears(1).AddDays(-1);
        }

        #endregion

        #region 相差天数

        /// <summary>
        /// 两日期之间相差天数
        /// </summary>
        /// <param name="starTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int DifferDays(DateTime? starTime, DateTime? endTime)
        {
            var result = 0;
            if (starTime.HasValue && endTime.HasValue)
            {
                return endTime.Value.Subtract(starTime.Value).Days;
            }
            return result;
        }
        #endregion

        #region 相差周数

        public static int DifferWeeks(DateTime? starTime, DateTime? endTime)
        {
            int result = 0;
            if (starTime.HasValue && endTime.HasValue)
            {
                var lastTime = GetLastDayOfWeek(starTime.Value);
                while (lastTime < endTime)
                {
                    result++;
                    lastTime = lastTime.AddDays(7);
                }
            }
            return result;
        }

        #endregion

        #region 相差月数

        /// <summary>
        /// 相差月数
        /// </summary>
        /// <param name="starTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int DifferMonths(DateTime? starTime, DateTime? endTime)
        {
            var result = 0;
            if (starTime.HasValue && endTime.HasValue)
            {
                return (endTime.Value.Year - starTime.Value.Year) * 12 +
                       (endTime.Value.Month - starTime.Value.Month);
            }
            return result;
        }

        #endregion

        #region 相差季度

        /// <summary>
        /// 相差季度
        /// </summary>
        /// <param name="starTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int DifferQuarters(DateTime? starTime, DateTime? endTime)
        {
            var result = 0;
            if (starTime.HasValue && endTime.HasValue)
            {
                var lastTime = GetLastDayOfQuarter(starTime.Value);
                while (lastTime < endTime)
                {
                    result++;
                    lastTime = lastTime.AddMonths(3);
                }
            }
            return result;
        }

        #endregion

        #region 相差半年

        /// <summary>
        /// 相差半年
        /// </summary>
        /// <param name="starTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int DifferHalfYears(DateTime? starTime, DateTime? endTime)
        {
            var result = 0;
            if (starTime.HasValue && endTime.HasValue)
            {
                var lastTime = GetLastDayOfHalfYear(starTime.Value);
                while (lastTime < endTime)
                {
                    result++;
                    lastTime = lastTime.AddMonths(6);
                }
            }
            return result;
        }

        #endregion

        #region 相差年数

        /// <summary>
        /// 相差年数
        /// </summary>
        /// <param name="starTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int DifferYears(DateTime? starTime, DateTime? endTime)
        {
            var result = 0;
            if (starTime.HasValue && endTime.HasValue)
            {
                return endTime.Value.Year - starTime.Value.Year;
            }
            return result;
        }

        #endregion

        #region 获取两个日期之间的所有时间集合

        /// <summary>
        /// 获取两个日期之间的所有时间集合
        /// </summary>
        /// <param name="beginDate"></param>
        /// <param name="endDate"></param>
        /// <returns></returns>
        public  static List<string> GetDateTimeList(DateTime beginDate, DateTime endDate)
        {
            var result = new List<string>();
            var dateTime = beginDate;
            while (endDate >= dateTime)
            {
                var item = dateTime.ToString("yy-MM-dd");
                result.Add(item);
                dateTime = dateTime.AddDays(1);
            }

            return result;
        }

        #endregion
    }

 

posted @ 2021-02-23 11:12  潇潇mini  阅读(66)  评论(0编辑  收藏  举报