黑马程序员技术交流社区

标题: 求解,因为是新手最好带点注释 谢谢 [打印本页]

作者: 我的专属    时间: 2014-3-12 13:13
标题: 求解,因为是新手最好带点注释 谢谢
输入一个日期xxxx-xx-x格式怎计算这天是星期几是这年中的第几天啊?求解,十分感谢
作者: 夢醒了⊙﹏⊙b心    时间: 2014-3-12 13:35
DateTime下的方法  DayOfYear 注意要实例化DateTime哦  
作者: 夢醒了⊙﹏⊙b心    时间: 2014-3-12 13:40
说错了 dayofryear应该是属性
作者: zhl406893081    时间: 2014-3-12 14:30
入学考试的测试题吗?:L话说我当时这道题直接没写...
给你个计算第几天的程序吧,
至于计算星期几,去网上查查蔡勒公式自己套吧.
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Console.WriteLine("       |----------------------------------------------------------------|");
  6.             Console.WriteLine("       |   这是一个“输入一个日期,求该日期是这一年中的第几天 ”的程序  |");
  7.             Console.WriteLine("       |----------------------------------------------------------------|");
  8.             Console.WriteLine();
  9.             Console.WriteLine("您需要输入一个日期...");
  10.             Console.WriteLine();
  11.             Console.Write("您需要输入年份:");
  12.             int year = int.Parse(Console.ReadLine());
  13.             Console.WriteLine();
  14.             Console.Write("您需要输入月份:");
  15.             int month = int.Parse(Console.ReadLine());
  16.             Console.WriteLine();
  17.             Console.Write("您需要输入具体日期(几号?):");
  18.             int date = int.Parse(Console.ReadLine());
  19.             Console.WriteLine();
  20.             Console.Write("{0}年{1}月{2}日是一年中的第", year, month, date);
  21.             bool b = Leap_Common_year(year);//判断平年还是闰年
  22.             switch (month)     //判断月份
  23.             {
  24.                 case 1: month_1(date); break;//根据日期计算出是哪一天
  25.                 case 2: month_2(date); break;
  26.                 case 3: month_3(date, b); break;
  27.                 case 4: month_4(date, b); break;
  28.                 case 5: month_5(date, b); break;
  29.                 case 6: month_6(date, b); break;
  30.                 case 7: month_7(date, b); break;
  31.                 case 8: month_8(date, b); break;
  32.                 case 9: month_9(date, b); break;
  33.                 case 10: month_10(date, b); break;
  34.                 case 11: month_11(date, b); break;
  35.                 case 12: month_12(date, b); break;
  36.                 default: Console.WriteLine("您输入的月份有误..."); break;
  37.             }
  38.             Console.ReadKey();
  39.         }
  40.         static bool Leap_Common_year(int year)//判断平年还是闰年
  41.         {
  42.             bool b;
  43.             if (year % 4 == 0 && year % 100 != 0)
  44.             {
  45.                 b = false;
  46.             }
  47.             else
  48.             {
  49.                 b = true;
  50.             }
  51.             return b;
  52.         }
  53.         static void month_1(int date)
  54.         {
  55.             Console.Write("{0}天。", date);


  56.         }
  57.         static void month_2(int date)
  58.         {
  59.             int d;
  60.             d = 31 + date;
  61.             Console.Write("{0}天", d);
  62.         }
  63.         static void month_3(int date, bool b)
  64.         {
  65.             int d;
  66.             if (b)
  67.             {
  68.                 d = 31 + 28 + date;
  69.             }
  70.             else
  71.             {
  72.                 d = 31 + 29 + date;
  73.             }
  74.             Console.Write("{0}天", d);


  75.         }
  76.         static void month_4(int date, bool b)
  77.         {
  78.             int d;
  79.             if (b)
  80.             {
  81.                 d = 31 + 28 + 31 + date;
  82.             }
  83.             else
  84.             {
  85.                 d = 31 + 29 + 31 + date;
  86.             }
  87.             Console.Write("{0}天", d);
  88.         }
  89.         static void month_5(int date, bool b)
  90.         {
  91.             int d;
  92.             if (b)
  93.             {
  94.                 d = 31 + 28 + 31 + 30 + date;
  95.             }
  96.             else
  97.             {
  98.                 d = 31 + 29 + 31 + 30 + date;
  99.             }
  100.             Console.Write("{0}天", d);
  101.         }
  102.         static void month_6(int date, bool b)
  103.         {
  104.             int d;
  105.             if (b)
  106.             {
  107.                 d = 31 + 28 + 31 + 30 + 31 + date;
  108.             }
  109.             else
  110.             {
  111.                 d = 31 + 29 + 31 + 30 + 31 + date;
  112.             }
  113.             Console.Write("{0}天", d);

  114.         }
  115.         static void month_7(int date, bool b)
  116.         {
  117.             int d;
  118.             if (b)
  119.             {
  120.                 d = 31 + 28 + 31 + 30 + 31 + 30 + date;
  121.             }
  122.             else
  123.             {
  124.                 d = 31 + 29 + 31 + 30 + 31 + 30 + date;
  125.             }
  126.             Console.Write("{0}天", d);

  127.         }
  128.         static void month_8(int date, bool b)
  129.         {
  130.             int d;
  131.             if (b)
  132.             {
  133.                 d = 31 + 28 + 31 + 30 + 31 + 30 + 31 + date;
  134.             }
  135.             else
  136.             {
  137.                 d = 31 + 29 + 31 + 30 + 31 + 30 + 31 + date;
  138.             }
  139.             Console.Write("{0}天", d);

  140.         }
  141.         static void month_9(int date, bool b)
  142.         {
  143.             int d;
  144.             if (b)
  145.             {
  146.                 d = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + date;
  147.             }
  148.             else
  149.             {
  150.                 d = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + date;
  151.             }
  152.             Console.Write("{0}天", d);
  153.         }
  154.         static void month_10(int date, bool b)
  155.         {
  156.             int d;
  157.             if (b)
  158.             {
  159.                 d = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + date;
  160.             }
  161.             else
  162.             {
  163.                 d = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + date;
  164.             }
  165.             Console.Write("{0}天", d);

  166.         }
  167.         static void month_11(int date, bool b)
  168.         {
  169.             int d;
  170.             if (b)
  171.             {
  172.                 d = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + date;
  173.             }
  174.             else
  175.             {
  176.                 d = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + date;
  177.             }
  178.             Console.Write("{0}天", d);

  179.         }
  180.         static void month_12(int date, bool b)
  181.         {
  182.             int d;
  183.             if (b)
  184.             {
  185.                 d = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + date;
  186.             }
  187.             else
  188.             {
  189.                 d = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + date;
  190.             }
  191.             Console.Write("{0}天", d);
  192.         }
  193.     }
复制代码

作者: 李恒权    时间: 2014-3-12 20:04
本帖最后由 李恒权 于 2014-3-12 20:06 编辑

//先取得年月日
            Console.WriteLine("请输入年份?");
            int year = Convert.ToInt32( Console.ReadLine());
            Console.WriteLine("请输入月份?");
            int month = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("请输入某日?");
            int date = Convert.ToInt32 (Console.ReadLine());
            int mon2=0;//用来接受判断出来闰年平年的2月份
            int mon3 = 0;//用于接收1、3、5、7、8、10、12月的天数。
            int mon4 = 0;//用于接收4、6、9、11月的天数。
            int dtnumber = 0;//判断某天在这年的第几天

            //判断闰年平年
            if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
            {
                mon2 = 29;
            }
            else
            {
                mon2 = 28;
            }

            //判断月份
            if (mon2 == 29)
            {
                //判断每个月份的天数
                switch (month)
                {
                    case 2: mon2= 29;
                        break;
                    case 1 - 3 - 5 - 7 - 8 - 10 - 12: mon3 = 31;
                        break;
                    case 4 - 6 - 8 - 11: mon4= 30;
                        break;
                }
                //判断某天在这年的第几天
                switch (month)
                {
                    case 1: dtnumber = date;
                        break;
                    case 2: dtnumber = mon3+date;
                        break;
                    case 3: dtnumber = mon3+ mon2+date;
                        break;
                    case 4: dtnumber = mon3 * 2 + mon2 + date;
                        break;
                    case 5: dtnumber = mon3 * 2 + mon4 + mon2 + date;
                        break;
                    case 6: dtnumber = mon3 * 3 + mon4 + mon2 + date;
                        break;
                    case 7: dtnumber = mon3 * 3 + mon4 * 2 + mon2 + date;
                        break;
                    case 8: dtnumber = mon3 * 4 + mon4 * 2 + mon2 + date;
                        break;
                    case 9: dtnumber = mon3 * 5+ mon4 * 2+ mon2 + date;
                        break;
                    case 10: dtnumber = mon3 * 5 + mon4 * 3 + mon2 + date;
                        break;
                    case 11: dtnumber = mon3 * 6 + mon4 * 3 + mon2 + date;
                        break;
                    case 12: dtnumber = mon3 * 6 + mon4 * 4 + mon2 + date;
                        break;
                }
            }
            else
            {
                //判断每个月份的天数
                switch (month)
                {
                    case 2: mon3 = 28;
                        break;
                    case 1 - 3 - 5 - 7 - 8 - 10 - 12: mon3 = 31;
                        break;
                    case 4 - 6 - 8 - 11: mon4 = 30;
                        break;
                }
                //判断某天在这年的第几天
                switch (month)
                {
                    case 1: dtnumber = date;
                        break;
                    case 2: dtnumber = mon3 + date;
                        break;
                    case 3: dtnumber = mon3 + mon2 + date;
                        break;
                    case 4: dtnumber = mon3 * 2 + mon2 + date;
                        break;
                    case 5: dtnumber = mon3 * 2 + mon4 + mon2 + date;
                        break;
                    case 6: dtnumber = mon3 * 3 + mon4 + mon2 + date;
                        break;
                    case 7: dtnumber = mon3 * 3 + mon4 * 2 + mon2 + date;
                        break;
                    case 8: dtnumber = mon3 * 4 + mon4 * 2 + mon2 + date;
                        break;
                    case 9: dtnumber = mon3 * 5 + mon4 * 2 + mon2 + date;
                        break;
                    case 10: dtnumber = mon3 * 5 + mon4 * 3 + mon2 + date;
                        break;
                    case 11: dtnumber = mon3 * 6 + mon4 * 3 + mon2 + date;
                        break;
                    case 12: dtnumber = mon3 * 6 + mon4 * 4 + mon2 + date;
                        break;
                }
            }

            DateTime td = new DateTime(year, month, date);//调用DateTime构造方法,DayOfWeek方法是得到td对象的时间是星期几。
            Console.WriteLine("{0}年{1}月{2}日,这一天是星期{3},是这一年的第{4}天。",year,month,date,td.DayOfWeek,dtnumber);
            Console.ReadKey();

        }  

    }

给你参考参考,希望你能从里面获得你觉得有用的东西。(因为是复制上来的,格式会有些乱)


作者: 百川    时间: 2014-3-12 20:50
本帖最后由 百川 于 2014-3-12 20:52 编辑
  1. while (true)
  2.             {
  3.                 string date;
  4.                 int leapYear;
  5.                 int year;
  6.                 int month;
  7.                 int day;
  8.                 Console.WriteLine("请输入日期,格式为xxxx-aa-bb");
  9.                 date = Console.ReadLine();
  10.                 year = Convert.ToInt32(date.Substring(0, 4));
  11.                 month = Convert.ToInt32(date.Substring(5, 2));
  12.                 day = Convert.ToInt32(date.Substring(8, 2));
  13.                 if ((year % 400 == 0) || (year % 4 == 0) && (year % 100 != 0))
  14.                 {
  15.                     leapYear = 1;
  16.                 }
  17.                 else
  18.                 {
  19.                     leapYear = 0;
  20.                 }
  21.                 int[] montharr = new int[] { 31, 28 + leapYear, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  22.                 bool checkDate = (day > montharr[month - 1]) || (day < 1) || (month > 12) || (month < 1);
  23.                 if (!checkDate)
  24.                 {
  25.                     int dayOfYear = 0;
  26.                     for (int i = 0; i < month - 1; i++)//获取当月之前的月份天数和
  27.                     {
  28.                         dayOfYear += montharr[i];
  29.                     }
  30.                     dayOfYear += day;//加上当前月的天数
  31.                     Console.WriteLine(dayOfYear);
  32.                 }
  33.                 else
  34.                 {
  35.                     Console.WriteLine("输入的日期不在范围内");
  36.                 }
  37.                 Console.ReadKey();
  38.             }
复制代码
  1. 你这个是黑马的基础测试吧。本来不想写的但是看到大家写的代码过于繁琐,我就拿出来献一下丑(虽然现在只会写一些简单的控制台),事先说明,没有进行字符串的校验,同时也没有封装。
复制代码



作者: cancle    时间: 2014-3-12 21:08
百川 发表于 2014-3-12 20:50

额,能不能把题目发给我?我试着做。。。谢谢
作者: §風過無痕§    时间: 2014-3-12 21:14
好久没练代码都不上手了:给个思路吧:
1.利用split方法把用户输入的年月日分别分出来
2.根据年份 判断该年是否是闰年(因为闰年平年的2月份天数不同)
3.根据用户输入的月份      再加上用户输入的天数(日数) 既能得出总天数
ol




附图一张及混乱代码一份
请求优化:


计算天数.rar (31.1 KB, 下载次数: 47)

作者: 百川    时间: 2014-3-12 21:30
cancle 发表于 2014-3-12 21:08
额,能不能把题目发给我?我试着做。。。谢谢

不太了解你说的题目是哪个,是不是“用户输入一个xxxx-xx-xx的格式的日期,计算出这一天是一年当中的第几天”?我的代码是楼主的问题。我当时做的时候还要计算星期几
作者: cancle    时间: 2014-3-12 21:56
百川 发表于 2014-3-12 21:30
不太了解你说的题目是哪个,是不是“用户输入一个xxxx-xx-xx的格式的日期,计算出这一天是一年当中的第几 ...

额,知道了,谢谢你。
作者: 我的专属    时间: 2014-3-12 23:53
zhl406893081 发表于 2014-3-12 14:30
入学考试的测试题吗?话说我当时这道题直接没写...
给你个计算第几天的程序吧,
至于计算星期几,去网上查查 ...

谢谢。。
作者: 我的专属    时间: 2014-3-12 23:55
cancle 发表于 2014-3-12 21:08
额,能不能把题目发给我?我试着做。。。谢谢

输入一个日期xxxx-xx-x格式怎计算这天是星期几是这年中的第几天啊?
作者: 百川    时间: 2014-3-13 00:46
  1. int iweek;
  2.             string week;
  3.             //因为0001年01月01日为星期一,且0001年的星期数为 dayOfYear % 7 的结果,所以可得下列表达式
  4.             iweek = ((year - 1) * 365 + dayOfYear + (year - 1) / 400 - (year - 1) / 100 + (year - 1) / 4) % 7;
  5.             switch (iweek)
  6.                 {
  7.                 case 1:week="星期一";break;
  8.                 case 2:week="星期二";break;
  9.                 case 3:week="星期三";break;
  10.                 case 4:week="星期四";break;
  11.                 case 5:week="星期五";break;
  12.                 case 6:week="星期六";break;
  13.                 default:week ="星期日"; break;
  14.                 }
复制代码

第几天已经解出来了,算出星期几在算出第几天的基础上。上面代码中的dayOfYear替换成一年当中的第几天的值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2