得到任意两个年份之间的各个年份和各个年份所占的月数

其中StartDate必须大于等于endDate;


public class CalendarMgr
    {

        /// <summary>
        /// 计算得到两个日期之间的学年
        /// </summary>
        /// <param name="startDate">开始日期</param>
        /// <param name="endDate">结束日期</param>
        /// <returns></returns>
        public static int[] CalculateSchoolYears(DateTime startDate, DateTime endDate)
        {
            int startSchoolYear = CalendarMgr.GetSchoolYears(startDate);
            int endSchoolYear = CalendarMgr.GetSchoolYears(endDate);

            System.Collections.ArrayList arrSchoolYears = new System.Collections.ArrayList();

            do
            {
                arrSchoolYears.Add(startSchoolYear);

                startSchoolYear += 1;
               
            }
            while (startSchoolYear <= endSchoolYear);

            int[] schoolYear = new int[arrSchoolYears.Count];

            arrSchoolYears.CopyTo(schoolYear);

            return schoolYear;
        }


        /// <summary>
        /// 获取当前日期所在学年
        /// </summary>
        /// <param name="m_Date">日期</param>
        /// <returns></returns>
        public static int GetSchoolYears(DateTime m_Date)
        {
            int schoolYear = m_Date.Year;

            if (m_Date.Month >= 7)
            {
               
            }
            else
            {
                schoolYear -= 1;
            }

            return schoolYear;
        }

        /// <summary>
        /// 计算两个日期之间的各个年份所占的月份
        /// </summary>
        /// <param name="startDate">开始年份</param>
        /// <param name="endDate">结束年份</param>
        /// <returns>各年的月份</returns>
        public static int[] GetSchoolMonthsPerYear(DateTime startDate, DateTime endDate)
        {
            int startSchoolYear = CalendarMgr.GetSchoolYears(startDate);
            int endSchoolYear = CalendarMgr.GetSchoolYears(endDate);

            System.Collections.ArrayList arrSchoolMonths = new System.Collections.ArrayList();

            int startMonths = CalendarMgr.GetStartMonths(startDate,endDate);
            arrSchoolMonths.Add(startMonths);


            if (startSchoolYear != endSchoolYear)
            {
                int endMonths = CalendarMgr.GetEndMonths(endDate);
                startSchoolYear++;
                while (startSchoolYear < endSchoolYear)
                {
                    arrSchoolMonths.Add(12);
                    startSchoolYear++;
                }

                arrSchoolMonths.Add(endMonths);
            }
            int[] schoolMonths=new int[arrSchoolMonths.Count];
            arrSchoolMonths.CopyTo(schoolMonths);

            return schoolMonths;
        }

        /// <summary>
        /// 获取起始年份的总的月份
        /// </summary>
        /// <param name="m_StartDate">起始年份</param>
        /// <returns></returns>
        public static int GetStartMonths(DateTime m_StartDate,DateTime m_EndDate)
        {
            int schoolMonth = m_StartDate.Month;
            int schoolEndMonth = m_EndDate.Month;
            int startMonths = 0;

            if (m_StartDate.Year == m_EndDate.Year&&((schoolMonth<7&&schoolEndMonth<7)||(schoolMonth>=7&&schoolEndMonth>=7)))
            {
                startMonths = m_EndDate.Month - schoolMonth + 1;
            }
            else
            {
                if (schoolMonth >= 7)
                {
                    startMonths = 12 - schoolMonth + 7;
                }
                else
                {
                    startMonths = 7 - schoolMonth;
                }
            }
            if ((m_EndDate.Year - m_StartDate.Year == 1) && schoolMonth >= 7 && schoolEndMonth < 7)
            {
                startMonths = 12 - schoolMonth + schoolEndMonth+1;
            }
            return startMonths;
        }

        /// <summary>
        /// 获取结束年份的总的月份
        /// </summary>
        /// <param name="m_EndDate">结束年份</param>
        /// <returns></returns>
        public static int GetEndMonths(DateTime m_EndDate)
        {
            int schoolMonth = m_EndDate.Month;
            int endMonths = 0;

            if (schoolMonth >= 7)
            {
                endMonths = schoolMonth - 6;
            }
            else
            {
                endMonths = 6+schoolMonth;
            }

            return endMonths;
        }
    }

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值