黑马程序员技术交流社区

标题: 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输... [打印本页]

作者: 爱吃桃子的猫    时间: 2014-4-24 13:36
标题: 编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输...
本帖最后由 爱吃桃子的猫 于 2014-4-24 14:12 编辑

基础测试题:编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,程序计算这一天是星期几,并且计算出是一年中的第几天。
喵是小菜一枚,这道题通过查MSDN之后,利用函数解决起来方便一点。也许会有些不妥,不过喵会继续努力,学习改进的。加油加油!!!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Text.RegularExpressions;

  6. namespace test10
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             //编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,
  13.             //程序计算这一天是星期几,并且计算出是一年中的第几天。
  14.             Console.WriteLine("请按“yyyy-MM-dd”的格式输入一个日期?");//提示用户输入
  15.             string str = Console.ReadLine();//接收用户输入的信息
  16.             DateTime dt;//定义一个日期型函数
  17.             //定义一个dool类型值来接收日期是否合法
  18.             bool flag = DateTime.TryParse(str, out dt);//TryParse,将日期和时间的指定字符串表示形式转换为其等效的 DateTime。
  19.             //下面通过if语句来判断日期是否合法
  20.             if (flag==true)
  21.             {
  22.                 //符合
  23.                 dt = Convert.ToDateTime(str);//将字符串转换为日期
  24.                 string[] week = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", };//定义一个日期数组
  25.                 //下面的语句用于向控制台输出日期里的年份 这一天是星期几,是一年中的第几天。
  26.                 Console.WriteLine("{0:yyyy-MM-dd}是{1}年,{2},是一年中的第{3}天.", dt, dt.Year, week[(int)dt.DayOfWeek], dt.DayOfYear);
  27.                 //dt.Year函数取年份
  28.                 //week[(int)dt.DayOfWeek] 将英文日期转换成中文日期  DayOfWeek这一天是星期几
  29.                 //dt.DayOfYear 这一天是一年中的第几天
  30.             }
  31.             else
  32.             {
  33.                 //不符合
  34.                 Console.WriteLine("您输入的日期格式有误,请重新输入。");
  35.             }
  36.             Console.ReadKey();
  37.         }
  38.     }
  39. }
复制代码





作者: continue     时间: 2014-4-24 18:51
这个是让自己写函数实现计算吗?可不可以直接调用系统的函数库来实现呢?
作者: 爱吃桃子的猫    时间: 2014-4-24 20:08
continue  发表于 2014-4-24 18:51
这个是让自己写函数实现计算吗?可不可以直接调用系统的函数库来实现呢? ...

这个方法就是直接调用系统函数实现的。。
作者: Invoker    时间: 2014-4-26 17:40
Console.WriteLine("请您输入一个类似“2008-01-02”格式的日期:");

            String s = Console.ReadLine();
            DateTime dt;
            DateTime.TryParse(s, out dt);
            int a=dt.DayOfYear;
            DayOfWeek b = dt.DayOfWeek;
            Console.WriteLine("这天是{0},也是这年的第{1}天",b,a);
            Console.ReadLine();

你可以参考下我的 我觉得我这么写应该是。。。。最偷懒的了
作者: threederek    时间: 2014-4-27 18:48
当初自己写的这个  没用系统函数
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

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

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

  17.             //判断是否是闰年
  18.             if (IsLeapYear(date))
  19.             {
  20.                 //CalDays(date, leapYear);
  21.                 CalDayOfTheWeek(date, CalDays(date,leapYear));

  22.             }
  23.             else
  24.             {
  25.                 //CalDays(date, commonYear);
  26.                 CalDayOfTheWeek(date, CalDays(date, commonYear));
  27.             }
  28.             
  29.             
  30.             Console.ReadKey();
  31.         }

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

  41.             //通过switch判断把数字转换为字符串输出星期
  42.             string weekStr = null;
  43.             switch (dayOfTheWeek)
  44.             {
  45.                 case 1:
  46.                     weekStr = "一";
  47.                     break;
  48.                 case 2:
  49.                     weekStr = "二";
  50.                     break;
  51.                 case 3:
  52.                     weekStr = "三";
  53.                     break;
  54.                 case 4:
  55.                     weekStr = "四";
  56.                     break;
  57.                 case 5:
  58.                     weekStr = "五";
  59.                     break;
  60.                 case 6:
  61.                     weekStr = "六";
  62.                     break;
  63.                 case 0:
  64.                     weekStr = "日";
  65.                     break;
  66.             }

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

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

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

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

  85.         }

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

  90.             return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
  91.         }
  92.     }
  93. }
复制代码

作者: 麦田怪圈    时间: 2014-4-30 14:30
长知识!
作者: dwgeneral    时间: 2014-5-2 13:55
我的也省事。。。。


作者: 刘建华    时间: 2015-1-23 12:12

这个是让自己写函数实现计算吗?可不可以直接调用系统的函数库来实现呢?
作者: long_yihuan    时间: 2015-4-11 14:26
不错,赞一个
作者: y137123606    时间: 2015-7-21 21:09
顶楼主一个




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