基姆拉尔森计算公式

来源:互联网 发布:mac mysql 忘记密码 编辑:程序博客网 时间:2024/05/17 07:58

功能描述:根据输入的日期判断当天是周几 

算法如下:

  基姆拉尔森计算公式

  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来代入公式计算。

判断日期是该月的第几周:

(DateTime.Now.Day- DateTime.Now.DayOfWeek+6)/7;

 

判断平年,闰年:

 static void Main(string[] args)
        {        
//如何计算当前日期是本月的第几周?

           
//得到当前为这个月的第几天
            int day = Convert.ToInt32(DateTime.Now.Day);
            Console.WriteLine(
"当前是这个月的第" + day + "");
           
//得到是当前年的哪一天
            int yearday = Convert.ToInt32(DateTime.Now.DayOfYear);
            Console.WriteLine(yearday);
           
//得到当前年
            int year = Convert.ToInt32(DateTime.Now.Year);
            Console.WriteLine(year);
           
//得到月份
            int month = Convert.ToInt32(DateTime.Now.Month);
           
int totalDays = 0;
           
bool inRn;//是否为闰年
            if (year % 4 == 0 && !(year % 100 == 0) || year % 400 == 0)
            {
                inRn
= true;
            }
           
else
            {
                inRn
= false;//平年
            }
           
for (int i = 1900; i < year; i++)
            {
               
/* 判断闰年或平年,并进行天数累加 */
               
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
                {
// 判断是否为闰年
                    totalDays = totalDays + 366; // 闰年366天
                }
               
else
                {
                    totalDays
= totalDays + 365; // 平年365天
                }
            }
            Console.WriteLine(totalDays);
           
int days = 0;
           
int beforeDays = 0;
           
for (int i = 1; i <= month; i++)
            {
               
switch (i)
                {
                   
case 1:
                   
case 3:
                   
case 5:
                   
case 7:
                   
case 8:
                   
case 10:
                   
case 12:
                        days
= 31;
                       
break;
                   
case 2:
                       
if (inRn)
                        {
                            days
= 29;
                        }
                       
else
                        {
                            days
= 28;
                        }
                       
break;
                   
default:
                        days
= 30;
                       
break;
                }
               
if (i < month)
                {
                    beforeDays
= beforeDays + days;
                }

            }
            Console.WriteLine(
"此月份之前的天数" + beforeDays);
            totalDays
= totalDays + beforeDays; // 距离1900年1月1日的天数
            int firstDayOfMonth; // 存储当月第一天是星期几:星期日为0
            int temp = 1 + totalDays % 7; // 从1900年1月1日推算
            if (temp == 7)
            {
// 求当月第一天
                firstDayOfMonth = 0; // 周日
            }
           
else
            {
                firstDayOfMonth
= temp;
            }
            Console.WriteLine(
"该月第一天是星期" + firstDayOfMonth);

        }

原创粉丝点击