黑马程序员技术交流社区

标题: 在.NET中有什么方法可以通过年月日获得是星期几? [打印本页]

作者: 余尚勇    时间: 2013-6-12 14:41
标题: 在.NET中有什么方法可以通过年月日获得是星期几?
本帖最后由 余尚勇 于 2013-6-15 03:02 编辑

在.NET中有什么方法可以通过年月日获得是星期几?应该用什么方法?
作者: ljh4282158    时间: 2013-6-12 14:45
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;
        }

这个是我用控制台写的万年历
作者: 江湖一浪人    时间: 2013-6-12 14:59
算法如下:
基姆拉尔森计算公式
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;
  }




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