参数要求:
开始年,结束年,每列排序3个月(在控制台实现效果)
效果如下:
08.01                           08.02                           08.03
周日 周一 周二 周三 周四 周五 周六   周日 周一 周二 周三 周四 周五 周六   周日 周一 周二 周三 周四 周五 周六
           1    2   3   4    5                       1   2    3     1   2  3    4    5   6   7

30 31                           30 31                            30 3108.04  08.05  08.06

 有没那个高手帮忙解决下

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace CalendarSystem
    {
        class Program
        {
            static void Main(string[] args)
            {
                CreateCalendar(2008, 2015);
            }        public static void CreateCalendar(int startDate, int endDate)
            {
                int start = startDate;
                int end = endDate;
                int months = (end - start + 1) * 12; //月
                for (int i = 0; i < months / 3; i++)
                {
                    Console.Write(String.Format("{0}\t\t\t", (GetMonthText(start, i * 3)).ToString()));
                    Console.Write(String.Format("{0}\t\t\t", (GetMonthText(start, i * 3 + 1)).ToString()));
                    Console.WriteLine(String.Format("{0}", (GetMonthText(start, i * 3 + 2)).ToString()));                Console.Write("日一二三四五六\t\t");
                    Console.Write("日一二三四五六\t\t");
                    Console.WriteLine("日一二三四五六");
                    for (int j = 0; j < 6; j++)
                    {
                        Console.Write(String.Format("{0}\t\t", SetDay(start, i * 3, j)));
                        Console.Write(String.Format("{0}\t\t", SetDay(start, i * 3 + 1, j)));
                        Console.WriteLine(String.Format("{0}", SetDay(start, i * 3 + 2, j)));
                    }
                }
                Console.ReadLine();
            }        public static string GetMonthText(int startYear, int addMonth)
            {
                DateTime dt = new DateTime(startYear, 1, 1);
                DateTime dtReturn = dt.AddMonths(addMonth);
                return dtReturn.Year + "." + dtReturn.Month;
            }        public static string SetDay(int startYear, int addMonth,double weekNum)
            {
                StringBuilder sb = new StringBuilder();
                DateTime dt = new DateTime(startYear, 1, 1);
                DateTime dtFirst = dt.AddMonths(addMonth);
                DateTime dtWeekFirst ;
                if (weekNum == 0)
                {
                    dtWeekFirst = dtFirst;
                }
                else
                {
                    double dStart = weekNum * 7 - Convert.ToDouble(dtFirst.DayOfWeek);
                    //if (dStart > dtFirst.AddMonths(1).AddDays(-1).Day)
                    //{
                    //    return "";
                    //}
                    dtWeekFirst = dtFirst.AddDays(dStart);
                }            string space = GetSpace(Convert.ToInt32(dtWeekFirst.DayOfWeek));
                sb.Append(space);
                for (double i = Convert.ToDouble(dtWeekFirst.DayOfWeek); i < 7; i++)
                {
                    if (dtWeekFirst.AddDays(i).DayOfYear > dtFirst.AddMonths(1).AddDays(-1).DayOfYear || dtWeekFirst.AddDays(i).Year > dtFirst.AddMonths(1).AddDays(-1).Year)
                    {
                        sb.Append("  ");
                        continue;
                    }                if (dtWeekFirst.DayOfWeek != 0)
                    {
                        sb.Append(dtWeekFirst.AddDays(i - Convert.ToDouble(dtWeekFirst.DayOfWeek)).Day.ToString("d2"));
                    }
                    else
                    {
                        sb.Append(dtWeekFirst.AddDays(i).Day.ToString("d2"));
                    }
                }
                return sb.ToString();
            }        public static string GetSpace(int num)
            {
                StringBuilder sb = new StringBuilder();
                if (num == 0)
                {
                    return "";
                }            for (int i = 0; i <= num; i++)
                {
                    sb.Append(" ");
                }
                return sb.ToString();
            }
        }
    }
    控制台的样式太难控制了,基本达到你的要求了.粘贴运行一下就行.