日期:2014-05-19  浏览次数:20420 次

关于输入年份得出每个月的星期六日天数的问题.谢谢!
1.在一个textbox里面输入一个年份,例如:2007
2.然后列出每个月有多少天是非星期六日,有多少天是星期六,有多少天是星期日?

能例子么?谢谢谢谢谢谢!!!


------解决方案--------------------
int y = 2007;
int i=0,j=0,k=0;

for(DateTime dt = new DateTime(y,1,1);dt.CompareTo(new DateTime(y+1,1,1)) <0;dt.AddDays(1))
{
if (dt.DayOfWeek==DayOfWeek.Saturday)
{
i++;//星期六天数
}
else if (dt.DayOfWeek==DayOfWeek.Sunday)
{
j++;//星期天天数
}
else
{
k++;//其他天数
}
}
------解决方案--------------------
有两个关键点:1、某年有多少天 2、每一年的第一天是星期几
第一个关键点参照:
DateTime a = "2007-1-1 ";
DateTime b = "2008-1-1 ";
TimeSpan c = b-a;
double d = c.TotalDays - 1;//d就是天数。
第二个关键点参照
C#实现的根据年月日计算星期几的函数 方案
算法如下:
基姆拉尔森计算公式
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;
}

调用方法:
Label2.Text=CaculateWeekDay(2007,1,1);

剩下的自己去组织吧