A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

小郭zaiheima

中级黑马

  • 黑马币:19

  • 帖子:79

  • 精华:0

本帖最后由 小郭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();

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2

查看全部评分

22 个回复

倒序浏览
本帖最后由 The_Enternal 于 2014-6-24 19:44 编辑

楼主的方法不错,我来补充一下,用C#自带的函数获取是第几天和星期几的代码,关于求星期几可以用蔡勒(zeller)公式
  • using System;
  • using System.Collections.Generic;
  • using System.Text;
  • namespace 年月日
  • {
  •     class Program
  •     {
  •         static void Main(string[] args)
  •         {
  •             //定义一个DateTime类型的变量用来接受日期
  •             DateTime date = new DateTime();
  •             Console.WriteLine("请按照yy-mm-dd格式输入日期:");
  •             //将用户输入的日期存储到date变量中
  •             date = Convert.ToDateTime(Console.ReadLine());
  •             //使用date.DayOfYear获取此日期是当年的第几天,是当年的星期几
  •             Console.WriteLine("此日期为当年的第{0}天,为{1}",date.DayOfYear,date.DayOfWeek);
  •             Console.ReadKey();
  •         }
  •     }
  • }

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
运行结果见下图



回复 使用道具 举报
再发一个用蔡勒公式求星期几的结果



评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
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);
        }  

点评

有可能出现负数或者是1月份2月份的情况  发表于 2014-6-25 09:05

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
   最后那句打错了Console.WriteLine("今天是星期"+weekStr);
  还有在主函数里面调用就可以了
回复 使用道具 举报
本帖最后由 The_Enternal 于 2014-6-25 09:04 编辑

  • using System;
  • using System.Collections.Generic;
  • using System.Text;
  • namespace 星期
  • {
  •     class Program
  •     {
  •         static void Main(string[] args)
  •         {
  •             Console.Title = "蔡勒公式-求某一天是星期几";
  •             Console.WriteLine("请按照yyyymmdd格式输入日期:");
  •             //获取日期
  •             string date = Console.ReadLine();
  •             //获取日期中完整的年份
  •             int yy=Convert.ToInt32(date.Substring(0,4));
  •             //获取日期中的世纪部分,年份的前两位
  •             int c = Convert.ToInt32(date.Substring(0, 2));
  •             //获取年份的后两位
  •             int y = Convert.ToInt32(date.Substring(2, 2));
  •            //获取月份
  •             int m = Convert.ToInt32(date.Substring(4, 2));
  •             //获取日期
  •             int d = Convert.ToInt32(date.Substring(6, 2));
  •             //星期几
  •             int w = 0;
  •             //如果是1月或2月要按照上一年的13月、14月来计算,如2014年1月1日,换成2014年13月1日计算
  •           if(m==1||m==2)
  •             {
  •               //把世纪和年份都转换成上一年的世纪和年份
  •                 c =Convert.ToInt32( yy--.ToString().Substring(0, 2));
  •                 y = Convert.ToInt32(yy--.ToString().Substring(2, 2));
  •                 m += 12;
  •             }
  •               //计算结果
  •           w = y + y / 4 + c / 4 - 2 * c + (26 * (m + 1) / 10) + d - 1;
  •             //如果结果是负数则+7直到为正数以后再求余
  •             while(w<0)
  •             {
  •                 w += 7;
  •             }
  •             //对7求余,所得结果就对应相应的星期
  •             w %= 7;
  •             switch (w)
  •             {
  •                 case 0: date = "星期日";
  •                     break;
  •                 case 1: date = "星期一";
  •                     break;
  •                 case 2: date = "星期二";
  •                     break;
  •                 case 3: date = "星期三";
  •                     break;
  •                 case 4: date = "星期四";
  •                     break;
  •                 case 5: date = "星期五";
  •                     break;
  •                 case 6: date = "星期六";
  •                     break;
  •             }
  •             Console.WriteLine("此日期是{0}年,{1}月,{2}",yy,m,date);
  •             Console.ReadKey();
  •         }
  •     }
  • }



评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

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

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

谢谢czwanglei的提醒。因为学校这几天在忙着毕业证的事儿,所以也没有来论坛,谢谢你的提醒
回复 使用道具 举报
天佑の清清 发表于 2014-6-24 23:34
private static void CalWeek(string date, int sum)
        {           
            int year = Conve ...

多谢了哈。我会好好地研究的,谢谢朋友们的分享
回复 使用道具 举报
天佑の清清 发表于 2014-6-24 23:34
private static void CalWeek(string date, int sum)
        {           
            int year = Conve ...

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

恩,加油
回复 使用道具 举报
谢谢分享,我是初学者,我也看看
回复 使用道具 举报
我做这个题时写的代码
    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
    }

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2

查看全部评分

回复 使用道具 举报
The_Enternal 发表于 2014-6-24 23:16
再发一个用蔡勒公式求星期几的结果

你好,以后截图截的小点,截有用的那部分哦
回复 使用道具 举报
收藏一下,面试用
回复 使用道具 举报
不错,学习一下!
回复 使用道具 举报
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("您输入的日期不符合格式!");
                }
        }
}
回复 使用道具 举报
路过学习。。。。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马