黑马程序员 测试题:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

主要记录计算星期几的算法:

公式来自网络:W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D    

Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。两个公式中的[...]均指只取计算结果的整数部分。算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。


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


namespace test10
{
    class Program
    {
        //编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
        static void Main(string[] args)
        {
            Console.WriteLine("请按yyyy-MM-dd的格式输入日期:");
            string date = Console.ReadLine();


            //定义闰年和平年每个月的天数数组
            int[] leapYear = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            int[] commonYear = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };


            //判断是否是闰年
            if (IsLeapYear(date))
            {
                //CalDays(date, leapYear);
                CalDayOfTheWeek(date, CalDays(date,leapYear));


            }
            else
            {
                //CalDays(date, commonYear);
                CalDayOfTheWeek(date, CalDays(date, commonYear));
            }
            
            
            Console.ReadKey();
        }


        //计算该天是星期几
        //公式来自网络:W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D    Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。两个公式中的[...]均指只取计算结果的整数部分。算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。
        private static void CalDayOfTheWeek(string date, int sum)
        {
            //通过字符串截取获得四位年份数,并转换为整数类型
            int year = Convert.ToInt32(date.Substring(0, 4));
            //计算是星期几
            int week = (year - 1) + ((year - 1) / 4) - ((year - 1) / 100) + ((year - 1) / 400) + sum;
            int dayOfTheWeek = week % 7;


            //通过switch判断把数字转换为字符串输出星期
            string weekStr = null;
            switch (dayOfTheWeek)
            {
                case 1:
                    weekStr = "一";
                    break;
                case 2:
                    weekStr = "二";
                    break;
                case 3:
                    weekStr = "三";
                    break;
                case 4:
                    weekStr = "四";
                    break;
                case 5:
                    weekStr = "五";
                    break;
                case 6:
                    weekStr = "六";
                    break;
                case 0:
                    weekStr = "日";
                    break;
            }


            Console.WriteLine("今天是星期",weekStr);
        }


        //计算日期是一年中的第几天
        private static int CalDays(string dateStr, int[] leapYear)
        {
            //通过字符串得到日期对象,并获得日和月
            DateTime date = Convert.ToDateTime(dateStr);
            int month = date.Month;
            int day = date.Day;


            //根据月份累加平闰年每个月天数数组中的数据,最后加上相应的日期得到累计日期
            int sum = 0;
            for (int i = 0; i < month -1 ; i++)
            {
                sum += leapYear[i];
            }
            sum += day;


            Console.WriteLine("该日期为今年的第{0}天",sum);
            return sum;


        }


        //判断是否是闰年,年份数能被4整除并且不能被100整除或者年份数能被400整除,为真则是闰年
        private static bool IsLeapYear(string date)
        {
            int year = Convert.ToInt32(date.Substring(0, 4));


            return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
        }
    }
}

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值