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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 余尚勇 于 2013-6-15 03:02 编辑

在.NET中有什么方法可以通过年月日获得是星期几?应该用什么方法?

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

2 个回复

正序浏览
算法如下:
基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
  在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
代码如下:
//y-年,m-月,d-日期
  string CaculateWeekDay(int y,int m, int d)
  {
  if(m==1) m=13;
  if(m==2) m=14;
        int week=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
  string weekstr="";
   switch(week)
   {
    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 7: weekstr="星期日"; break;
   }
          return weekstr;
  }

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
winform  和asp中好印象有专门的函数可以获取年月日

{
            Console.Write("请选择年份: ");
            int year = int.Parse(Console.ReadLine());
            Console.Write("请选择月份: ");
            int month = int.Parse(Console.ReadLine());
            Console.WriteLine("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
            int days = GetDaysOfMonth(year, month);
            int firstDayOfMonth = GetWeekOfDate(year, month, 1);
            for (int n = 0; n < firstDayOfMonth; n++)
            {
                Console.Write("\t");
            }
            for (int i = 1; i <= days; i++)
            {
                Console.Write(i + "\t");
                if (GetWeekOfDate(year, month, i) == 6)
                {
                    Console.WriteLine();
                }
            }
            Console.ReadLine();
        }
        #region 判断是否为闰年
        static bool IsleapYear(int year)
        {

            if ((year % 4 == 0 && year % 100 != 100) || year % 400 == 0)
            {
                return true;
            }
            else
                return false;

        }
        #endregion
        #region 一个月有多少天
        static int GetDaysOfMonth(int year, int month)
        {

            int days = 0;

            switch (month)//定义月份
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    days = 31;
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    days = 30;
                    break;
                case 2:
                    days = IsleapYear(year) ? 29 : 28;
                    break;
                default:
                    days = 30;
                    break;
            }
            return days;
        }
        #endregion
        #region 一年有多少天
        static int GetDaysOfYear(int year)
        {
            return IsleapYear(year) ? 366 : 365;
        }
        #endregion
        #region 时间的星期
        static int GetWeekOfDate(int year, int month, int day)
        {
            int days = GetDaysOfDate(year, month, day);
            return (days + 2) % 7;
        }
        #endregion


        static int GetDaysOfDate(int year, int month, int day)
        {
            int totalDays = 0;
            for (int i = 1980; i < year; i++)
            {
                totalDays = totalDays + GetDaysOfYear(i);
            }
            for (int i = 1; i < month; i++)
            {
                totalDays += GetDaysOfMonth(year, i);
            }
            totalDays = totalDays + day - 1;
            return totalDays;
        }

这个是我用控制台写的万年历

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马