万年历——ASP.NETCORE写法

举报
红目香薰 发表于 2023/05/29 00:03:20 2023/05/29
【摘要】 万年历——ASP.NETCORE写法 创建.NET Core控制台应用程序实现万年历,通过输入的年份和月份在控制台中打印出指定年份和月份的日历。

目录

题目要求:

实现代码:

代码解析:

效果示例:



题目要求:

创建.NET Core控制台应用程序实现万年历,通过输入的年份和月份在控制台中打印出指定年份和月份的日历。

实现代码:

//做一个万年历
Console.WriteLine("请输入年份:");
string year = Console.ReadLine();
Console.WriteLine("请输入月份:");
string month = Console.ReadLine();
//获取星期几,这个月多少天
DateTime dt = DateTime.Parse(string.Format("{0}-{1}-1", year, month));
int week = (int)dt.DayOfWeek;
int monthsDay = DateTime.DaysInMonth(int.Parse(year), int.Parse(month));
Console.WriteLine("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
for (int i = 0; i < week; i++)
{
    Console.Write("\t");
}
for (int i = 0; i < monthsDay; i++)
{
    Console.Write((i + 1) + "\t");
    if ((i + week + 1) % 7 == 0)
    {
        Console.WriteLine();
    }
}

代码解析:

1、需要在控制台录入年份以及月份的两个信息。

string year = Console.ReadLine();

string month = Console.ReadLine();

2、需要根据年月计算当前月的一号是星期几。

获取具体的DateTime格式时间戳:

DateTime dt = DateTime.Parse(string.Format("{0}-{1}-1", year, month));

根据具体的DateTime来获取对应1号的星期。

int week = (int)dt.DayOfWeek;

由于是枚举类型,故而可以直接使用强转来处理类型的变化。我们可得到int类型的星期。

3、根据年月来计算当前月的最大天数是多少。

int monthsDay = DateTime.DaysInMonth(int.Parse(year), int.Parse(month));

使用这个方法免去了计算闰年的过程。相对效率会高很多。

4、遍历的制表符\t处理。

for (int i = 0; i < week; i++)
{
    Console.Write("\t");
}
这里我们使用的week是1号的具体星期,我们的星期排布方式是:

"星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t"

5、每星期换一次行。

for (int i = 0; i < monthsDay; i++)
{
    Console.Write((i + 1) + "\t");
    if ((i + week + 1) % 7 == 0)
    {
        Console.WriteLine();
    }
}
可以看到在遍历的过程中对(i+week+1)进行求余7的操作。如果结果是0直接换行即可。

效果示例:

输入年份与月份,得出当前月的万年月。

实际日历:

这个是从实际2023年2月的日历,与咱们遍历的是一致的,计算好对应的星期起始很重要。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。