其中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;
}
}