黑马程序员技术交流社区

标题: “yyyy-MM-dd”日期,计算这一天是星期几,是一年中的第几... [打印本页]

作者: 小郭zaiheima    时间: 2014-6-24 02:47
标题: “yyyy-MM-dd”日期,计算这一天是星期几,是一年中的第几...
本帖最后由 小郭zaiheima 于 2014-6-27 22:14 编辑

不知道同学们都是用的什么方式,有没有一种方式是用C#最基础的知识编写出来的啊,我用基础的只是编写出来了计算闰年或者平年中的第多少天,现在来分享一下。如果朋友们有其他的方式或者能计算出是星期几来,希望同学们赐教。


int[] months = { 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 };  //平年每个月天数

            int i = 1;
            Console.WriteLine("请按yyyy-MM-dd的格式输入日期:");
            string date = Console.ReadLine();

            //使用Substring截取年份,即前四个数字,并转换成int类型
            int year = Convert.ToInt32(date.Substring(0, 4));
            int month = Convert.ToInt32(date.Substring(4, 2));  //截取月份
            int day = Convert.ToInt32(date.Substring(6, 2));    //截取天数,为当月的第几天
            int sum = 0;       //定义总天数sum

            //计算出是一年中的第几天
            if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))   //闰年进入此程序
            {
                for (i = 1; i < month; i++)
                {
                    sum = sum + months[i - 1];   //此处为计算日期闰年年份中的第几个月之前月份的总天数
                }
                sum = sum + day;//此处为计算闰年日期年份中的第几天
                Console.WriteLine("此日期为今年的第{0}天", sum);
            }
            else
            {
                for (i = 1; i < month; i++)
                {
                    sum = sum + commonYear[i - 1]; //此处为计算日期平年年份中的第几个月之前月份的总天数
                }
                sum = sum + day;    //此处为计算平年日期年份中的第几天
                Console.WriteLine("此日期为今年的第{0}天", sum);
            }
            Console.ReadKey();
作者: The_Enternal    时间: 2014-6-24 19:41
本帖最后由 The_Enternal 于 2014-6-24 19:44 编辑

楼主的方法不错,我来补充一下,用C#自带的函数获取是第几天和星期几的代码,关于求星期几可以用蔡勒(zeller)公式

作者: The_Enternal    时间: 2014-6-24 19:43
运行结果见下图




作者: The_Enternal    时间: 2014-6-24 23:16
再发一个用蔡勒公式求星期几的结果




作者: 天佑の清清    时间: 2014-6-24 23:34
private static void CalWeek(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;         
            string weekStr = "";
            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);
        }  
作者: 天佑の清清    时间: 2014-6-24 23:39
   最后那句打错了Console.WriteLine("今天是星期"+weekStr);
  还有在主函数里面调用就可以了
作者: The_Enternal    时间: 2014-6-25 09:01
本帖最后由 The_Enternal 于 2014-6-25 09:04 编辑




作者: czwanglei    时间: 2014-6-26 19:05
当有人给你回复后,请你及时把帖子编辑为提问结束,这样版主才给你加技术分
作者: 小郭zaiheima    时间: 2014-6-27 22:10
The_Enternal 发表于 2014-6-24 19:41
楼主的方法不错,我来补充一下,用C#自带的函数获取是第几天和星期几的代码,关于求星期几可以用蔡勒(zelle ...

谢谢了哈。因为这几天学校的事儿一直没来,我会好好地学习研究的。。再次表示谢谢
作者: 小郭zaiheima    时间: 2014-6-27 22:11
czwanglei 发表于 2014-6-26 19:05
当有人给你回复后,请你及时把帖子编辑为提问结束,这样版主才给你加技术分 ...

谢谢czwanglei的提醒。因为学校这几天在忙着毕业证的事儿,所以也没有来论坛,谢谢你的提醒
作者: 小郭zaiheima    时间: 2014-6-27 23:07
天佑の清清 发表于 2014-6-24 23:34
private static void CalWeek(string date, int sum)
        {           
            int year = Conve ...

多谢了哈。我会好好地研究的,谢谢朋友们的分享
作者: 小郭zaiheima    时间: 2014-6-27 23:09
天佑の清清 发表于 2014-6-24 23:34
private static void CalWeek(string date, int sum)
        {           
            int year = Conve ...

多谢了哈。我会好好地学习学习的,谢谢朋友们的分享
作者: czwanglei    时间: 2014-6-28 10:28
小郭zaiheima 发表于 2014-6-27 22:11
谢谢czwanglei的提醒。因为学校这几天在忙着毕业证的事儿,所以也没有来论坛,谢谢你的提醒 ...

恩,加油
作者: liangdmaster    时间: 2014-6-30 18:13
谢谢分享,我是初学者,我也看看
作者: c19t043    时间: 2014-7-6 00:13
我做这个题时写的代码
    class Program
    {
        //10、编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期,
        //程序计算这一天是星期几,并且计算出是一年中的第几天。
        static void Main(string[] args)
        {
            Console.WriteLine("请输入一个日期,如2014-07-05");
            string str = Console.ReadLine();
            ConvertDate(str);
            ComputeDate(str);
            Console.ReadKey();
        }
        #region 判断输入年是不是瑞年
        public static int LeapYear(int year)
        {
            if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
        #endregion
        #region 计算这一天是星期几
        /// <summary>
        /// 计算这一天是星期几
        /// </summary>
        /// <param name="str"></param>
        private static void ConvertDate(string str)
        {
            //定一个原点,2014-01-01 是星期三
            int baseYear = 2014;
            string[] str1 = str.Split('-');
            int count = 0;//闰年数
            int year = Convert.ToInt32(str1[0]);//输入的年
            int month = Convert.ToInt32(str1[1]);//输入的月
            int day = Convert.ToInt32(str1[2]);//输入的天
            int runnianDay = 0;
            int sumDay = 0;//输入年到元年间的天数
            int date = 0;//星期几
            //判断输入的年份是不是闰年
            runnianDay= LeapYear(year);
            //计算输入的年到元年(2014)之间有多少个闰年
            //输入的年份大于元年(2014)
            if (year > baseYear)
            {
                for (int i = baseYear; i < year; i++)
                {
                    if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
                    {
                        count++;
                    }
                }
            }
            else
            {
                for (int i = year + 1; i <= baseYear; i++)
                {
                    if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))
                    {
                        count++;
                    }
                }
            }
            //计算输入年到元年之间有多少天
            if (year > baseYear)
            {
                if (month >= 2)
                {
                    sumDay = (year - baseYear) * 365 + (month - 1) * 30 + day + 28 + runnianDay + count;
                }
                else
                {
                    sumDay = (year - baseYear) * 365 + day + count;
                }
            }
            else
            {
                if (month >= 2)
                {
                    sumDay = (baseYear - year) * 365 + (month - 1) * 30 + day + 28 + runnianDay + count;
                }
                else
                {
                    sumDay = (baseYear - year) * 365 + day + count;
                }
            }
            date = sumDay % 7;
            switch (date)
            {
                case 1: Console.WriteLine("这一天是星期四"); break;
                case 2: Console.WriteLine("这一天是星期五"); break;
                case 3: Console.WriteLine("这一天是星期六"); break;
                case 4: Console.WriteLine("这一天是星期日"); break;
                case 5: Console.WriteLine("这一天是星期一"); break;
                case 6: Console.WriteLine("这一天是星期二"); break;
                case 0: Console.WriteLine("这一天是星期三"); break;
            }
        }
        #endregion
        #region 计算这一天是一年中的第几天
        public static void ComputeDate(string str)
        {
            string[] str1 = str.Split('-');
            int year = Convert.ToInt32(str1[0]);//输入的年
            int month = Convert.ToInt32(str1[1]);//输入的月
            int day = Convert.ToInt32(str1[2]);//输入的天
            int leapYearDay=LeapYear(year);
            int sumDay = 0;
            if (month < 2)
            {
                sumDay = day;
                Console.WriteLine("这一天是一年中的第{0}天", sumDay);
            }
            else
            {
                sumDay = (month - 1) * 30 + 28 + leapYearDay;
                Console.WriteLine("这一天是一年中的第{0}天", sumDay);
            }
        }
        #endregion
    }


作者: czwanglei    时间: 2014-7-6 13:56
The_Enternal 发表于 2014-6-24 23:16
再发一个用蔡勒公式求星期几的结果

你好,以后截图截的小点,截有用的那部分哦

作者: liangdmaster    时间: 2014-7-7 00:01
收藏一下,面试用
作者: 乔相坤    时间: 2014-7-8 17:45
不错,学习一下!
作者: 大★宝    时间: 2014-8-3 12:37
package com.itheima;

import java.io.*;
import java.util.Calendar;
import java.util.Date;

public class Test9
{

        public Test9()
        {
        }

        public static void main(String args[])
        {
                String weeks[] = {
                        "", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"
                };
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                System.out.print("请输入日期(yyyy-MM-dd):");
                try
                {
                        String input = reader.readLine();
                        String strs[] = input.split("-");
                        int year = Integer.parseInt(strs[0]);
                        int month = Integer.parseInt(strs[1]);
                        int day = Integer.parseInt(strs[2]);
                        Date date = new Date(year - 1900, month - 1, day);
                        Calendar calendar = Calendar.getInstance();
                        calendar.setTime(date);
                        int weekIndex = calendar.get(7);
                        int dayOfYear = calendar.get(6);
                        System.out.println((new StringBuilder(String.valueOf(input))).append(" 是 ").append(weeks[weekIndex]).append(",是一年中的第").append(dayOfYear).append("天.").toString());
                }
                catch (Exception e)
                {
                        System.out.println("您输入的日期不符合格式!");
                }
        }
}
作者: long_yihuan    时间: 2015-4-11 16:03
路过学习。。。。
作者: 千山万水    时间: 2015-8-4 11:30
嗯  不错呢
作者: 雨来    时间: 2015-10-13 15:48
看的懂,只不过语句不一样吧了




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