C#-编写一个显示日历的程序,只询问年份和月份,使用System.DateTime

C#-编写一个显示日历的程序,只询问年份和月份,使用System.DateTime,c#,datetime,system,C#,Datetime,System,我被困在这一点上,我需要帮助,我如何可以要求用户输入输入任何年份和任何月份,然后将输出指定年份和月份的月历,我还需要使用system.datetime 这是我到目前为止的代码,我不认为它是正确的,任何帮助都是感激的。谢谢 class Program { static int year = new int(); static int month = new int(); static int[,] calendar = new int[6, 7]; static

我被困在这一点上,我需要帮助,我如何可以要求用户输入输入任何年份和任何月份,然后将输出指定年份和月份的月历,我还需要使用system.datetime 这是我到目前为止的代码,我不认为它是正确的,任何帮助都是感激的。谢谢

class Program
{
    static int year = new int();
    static int month = new int();
    static int[,] calendar = new int[6, 7];

    static void Main(string[] args)
    {
        Console.Write("Enter the year? ");
        year = Convert.ToInt32(Console.ReadLine());
        Console.Write("Enter the month (January = 1, etc): ");
        month = Convert.ToInt32(Console.ReadLine());

        DrawHeader();
        FillCalendar();
        DrawCalendar();
        Console.ReadLine();
    }

    static void DrawHeader()
    {
        Console.Write("\n\n");
        Console.WriteLine("\t" + month);
        Console.WriteLine("Mo Tu We Th Fr Sa Su");
    }

    static void FillCalendar()
    {
        int days = DateTime.DaysInMonth(year, month);
        int currentDay = 1;
        for (int i = 0; i < calendar.GetLength(0); i++)
        {
            for (int j = 0; j < calendar.GetLength(1) && currentDay <= days; j++)
            {
                if (i == 0 && month > j)
                {
                    calendar[i, j] = 0;
                }
                else
                {
                    calendar[i, j] = currentDay;
                    currentDay++;
                }
            }
        }
    }

    static void DrawCalendar()
    {
        for (int i = 0; i < calendar.GetLength(0); i++)
        {
            for (int j = 0; j < calendar.GetLength(1); j++)
            {
                if (calendar[i, j] > 0)
                {
                    if (calendar[i, j] < 10)
                    {
                        Console.Write(" " + calendar[i, j] + " ");
                    }
                    else
                    {
                        Console.Write(calendar[i, j] + " ");
                    }
                }
                else
                {
                    Console.Write("   ");
                }
            }
            Console.WriteLine("");
        }
    }
}
类程序
{
静态整数年=新整数();
静态整数月份=新整数();
静态整数[,]日历=新整数[6,7];
静态void Main(字符串[]参数)
{
控制台。写入(“输入年份?”);
year=Convert.ToInt32(Console.ReadLine());
控制台。写入(“输入月份(一月=1等):”;
month=Convert.ToInt32(Console.ReadLine());
牵引头();
FillCalendar();
挂历();
Console.ReadLine();
}
静态void DrawHeader()
{
控制台。写入(“\n\n”);
控制台写入线(“\t”+月);
Console.WriteLine(“Mo-Tu-We-Th-Fr-Sa-Su”);
}
静态void FillCalendar()
{
int days=DateTime.DaysInMonth(年,月);
int currentDay=1;
for(int i=0;i0)
{
如果(日历[i,j]<10)
{
控制台。写(“+日历[i,j]+”);
}
其他的
{
Console.Write(日历[i,j]+“”);
}
}
其他的
{
控制台。写(“”);
}
}
控制台。写线(“”);
}
}
}

这应确保月日与星期日正确对齐(即12月1日是星期二)

使用系统;
利用制度全球化;
名称空间日历
{
班级计划
{
静态整数年=新整数();
静态整数月份=新整数();
静态整数[,]日历=新整数[6,7];
私有静态日期时间日期;
静态void Main(字符串[]参数)
{
控制台。写入(“输入年份?”);
year=Convert.ToInt32(Console.ReadLine());
控制台。写入(“输入月份(一月=1等):”;
month=Convert.ToInt32(Console.ReadLine());
date=new DateTime(年、月、1);//为每个月的第一天提供一个DateTime对象
牵引头();
FillCalendar();
挂历();
Console.ReadLine();
}
静态void DrawHeader()
{
控制台。写入(“\n\n”);
//显示日历顶部的月份和年份
Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(月)+年);
Console.WriteLine(“Mo-Tu-We-Th-Fr-Sa-Su”);
}
静态void FillCalendar()
{
int days=DateTime.DaysInMonth(年,月);
int currentDay=1;
var dayOfWeek=(int)date.dayOfWeek;
for(int i=0;i0)
{
如果(日历[i,j]<10)
{
控制台。写(“+日历[i,j]+”);
}
其他的
{
Console.Write(日历[i,j]+“”);
}
}
其他的
{
控制台。写(“”);
}
}
控制台。写线(“”);
}
}
}
}

编辑

如果你想得到一个月内一周中某一天的所有日期,你可以这样做

        var weekDay = 0;
        var dates = new List<DateTime>();
        for (int i = 0; i < days; i++)
        {
            if ((int)date.AddDays(i).DayOfWeek == weekDay)
            {
                dates.Add(date.AddDays(i));
            }
        }
var-weekDay=0;
变量日期=新列表();
对于(int i=0;i

您必须要求用户输入一周中的一天,并将weekDay设置为他们输入的值。记住周日是0,周六是6。(我还没有完全测试过这一点,所以要小心)-这必须输入到您的FillCalendar方法中。

您能更详细地描述一下为什么您认为它不正确吗?或者你遇到了什么问题?你说你必须使用System.DateTime是什么意思?你为什么要使用它?例如,您需要将输入的值转换为日期对象吗?yh,这是不正确的,因为输出不是它应该做的,例如,我需要使用system.datetime,我不知道如何实现,您应该在Microsoft开发网络库中查找system.datetime。您可以声明DateTime类型的变量,然后使用
        var weekDay = 0;
        var dates = new List<DateTime>();
        for (int i = 0; i < days; i++)
        {
            if ((int)date.AddDays(i).DayOfWeek == weekDay)
            {
                dates.Add(date.AddDays(i));
            }
        }