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);剩下的自己去组织吧
还是按楼主要求写完整吧int y = int.Parse(textBox1.Text); 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++;//其他天数 } } Response.Write(y.ToString()+"年有"+i.ToString()+"个星期六<BR>"); Response.Write(y.ToString()+"年有"+j.ToString()+"个星期日<BR>"); Response.Write(y.ToString()+"年有"+k.ToString()+"个非星期六日");
二楼的方法好,寒自己一下,居然没想到CompareTo
sorry,没看清题,重新改了下int y = int.Parse(textBox1.Text);for(int m=1;m<=12;m++) { DateTime dt0 = new DateTime(y,m,1); int i=0,j=0,k=0; for(DateTime dt = dt0;dt.CompareTo(dt0.AddMonth(1))<0;dt.AddDays(1)) { if (dt.DayOfWeek==DayOfWeek.Saturday) { i++;//星期六天数 } else if (dt.DayOfWeek==DayOfWeek.Sunday) { j++;//星期天天数 } else { k++;//其他天数 } } Response.Write(y.ToString()+"年"+m.ToString()+"月有"+i.ToString()+"个星期六<BR>"); Response.Write(y.ToString()+"年"+m.ToString()+"月有"+j.ToString()+"个星期日<BR>"); Response.Write(y.ToString()+"年"+m.ToString()+"月有"+k.ToString()+"个非星期六日"); }
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++;//其他天数
}
}
第一个关键点参照:
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);剩下的自己去组织吧
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++;//其他天数
}
}
Response.Write(y.ToString()+"年有"+i.ToString()+"个星期六<BR>");
Response.Write(y.ToString()+"年有"+j.ToString()+"个星期日<BR>");
Response.Write(y.ToString()+"年有"+k.ToString()+"个非星期六日");
{
DateTime dt0 = new DateTime(y,m,1);
int i=0,j=0,k=0;
for(DateTime dt = dt0;dt.CompareTo(dt0.AddMonth(1))<0;dt.AddDays(1))
{
if (dt.DayOfWeek==DayOfWeek.Saturday)
{
i++;//星期六天数
}
else if (dt.DayOfWeek==DayOfWeek.Sunday)
{
j++;//星期天天数
}
else
{
k++;//其他天数
}
}
Response.Write(y.ToString()+"年"+m.ToString()+"月有"+i.ToString()+"个星期六<BR>");
Response.Write(y.ToString()+"年"+m.ToString()+"月有"+j.ToString()+"个星期日<BR>");
Response.Write(y.ToString()+"年"+m.ToString()+"月有"+k.ToString()+"个非星期六日");
}