C# 計算2個日期間有哪些月份

計算2個日期間有哪些月份

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MirandaTestConsole
{
    /// <summary>
    /// 計算2個日期間有哪些月份
    /// </summary>
    class SpanMonth
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.Write("請輸入查詢起日(yyyy/mm/dd):");
                string StartDate = Console.ReadLine();
                Console.Write("請輸入查詢迄日(yyyy/mm/dd):");
                string EndDate = Console.ReadLine();
                List<string> MonthList = new List<string>();
                MonthList=countMonth(StartDate, EndDate);

                foreach (var x in MonthList)
                {
                    Console.WriteLine(x);
                }

                Console.ReadLine();
            }
        }
        /// <summary>
        /// 計算查詢區間
        /// </summary>
        /// <param name="strDate"></param>
        /// <param name="endDate"></param>
        /// <returns></returns>
        public static List<string> countMonth(string strDay, string endDay)
        {
            List<string> MonthList = new List<string>();
            DateTime StartDate = DateTime.Parse(strDay);
            DateTime EndDate = DateTime.Parse(endDay);
            int totalMonth = EndDate.Year * 12 + EndDate.Month - StartDate.Year * 12 - StartDate.Month;
            int Years = totalMonth / 12;
            int Months = Mod(totalMonth, 12);

            Console.WriteLine("總月數:" + totalMonth);
            Console.WriteLine(Years + "年又" + Months+"個月...");

            if (StartDate.Year == EndDate.Year)
            {
                //起訖同年
                for (int m = 0 ; m <= (EndDate.Month-StartDate.Month) ; m++)
                {
                    int MM = StartDate.Month + m;
                    MonthList.Add(StartDate.Year + "/" + MM.ToString("00"));
                }
            }
            else
            {
                //起訖不同年
                //先處理今年剩下的
                for (int m = StartDate.Month ; m <= 12 ; m++)
                {
                    MonthList.Add(StartDate.Year + "/" + m.ToString("00"));
                }
                //處理往後幾年的
                for (int c = 1 ; c <= (EndDate.Year - StartDate.Year) ; c++)
                {
                    int yyyy = StartDate.Year + c;
                    if (yyyy == EndDate.Year)
                    {
                        for (int mm = 1 ; mm <= EndDate.Month ; mm ++)
                        {
                            MonthList.Add(EndDate.Year + "/" + mm.ToString("00"));
                        }
                    }
                    else
                    {
                        for (int mn = 1 ; mn <= 12 ; mn++)
                        {
                            MonthList.Add(yyyy + "/" + mn.ToString("00"));
                        }
                    }
                }
            }
            return MonthList;

        }
        public static int Mod(int n, int m)
        {
            return ((n % m) + m) % m;
        }
    }
}