首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

初学者有关问题,大家一起帮忙看看,多谢拉~

2012-03-19 
菜鸟问题,大家一起帮忙看看,谢谢拉~~~~请问各位,如何编写一个函数,求得具体一天是星期几?比如:2001年9月18

菜鸟问题,大家一起帮忙看看,谢谢拉~~~~
请问各位,如何编写一个函数,求得具体一天是星期几?
比如:2001年9月18日是星期几?

另外还有个问题,.net的帮助文件里,我们经常看到一些已经定义好的函数,我们直接调用就可以了,那是否可以看到函数的原代码?还是只能调用,看不到原代码呢?

[解决办法]
先要知道最早的一天是星期几
例如从2000年开始,那么就要知道2000年1月1日是星期几
之后要算出具体那一天离2000年1月1日相差多少天,再将这个天数余7取模
最后将2000年1月1日的星期几加上余下的模
如2000年1月1日是星期一,余下的模是1,那么具体那一天就是星期二(1+1)
 2000年1月1日是星期六,余下的模是6,那么具体那一天就是星期五(6+6-7)


以上仅做参考
[解决办法]
private string date(int year,int month,int day)
{
//1980 1 1 2
int days=0,k=0,i,z;
int years=year-1753;
string week= " ";
for(i=1753;i <=year;i++)
{
if(i%4==0&&i%100!=0||i%400==0)
{
k++;
}
}
days+=years*365+k;

if(year%4==0&&year%100!=0||year%400==0)
{
switch(month)
{
case 1:break;
case 2:days+=31;break;
case 3:days+=31+28;break;
case 4:days+=31+28+31;break;
case 5:days+=31+28+31+30;break;
case 6:days+=31+28+31+30+31;break;
case 7:days+=31+28+31+30+31+30;break;
case 8:days+=31+28+31+30+31+30+31;break;
case 9:days+=31+28+31+30+31+30+31+31;break;
case 10:days+=31+28+31+30+31+30+31+31+30;break;
case 11:days+=31+28+31+30+31+30+31+31+30+31;break;
case 12:days+=31+28+31+30+31+30+31+31+30+31+30;break;
}
}
else
{
switch(month)
{
case 1:break;
case 2:days+=31;break;
case 3:days+=31+28;break;
case 4:days+=31+28+31;break;
case 5:days+=31+28+31+30;break;
case 6:days+=31+28+31+30+31;break;
case 7:days+=31+28+31+30+31+30;break;
case 8:days+=31+28+31+30+31+30+31;break;
case 9:days+=31+28+31+30+31+30+31+31;break;
case 10:days+=31+28+31+30+31+30+31+31+30;break;
case 11:days+=31+28+31+30+31+30+31+31+30+31;break;
case 12:days+=31+28+31+30+31+30+31+31+30+31+30;break;
}
}
days+=day;
z=1+days%7;
if(z> =7)
{
z=z-7;
}
switch(z)
{
case 0:week= "星期六 ";break;
case 1:week= "星期天 ";break;
case 2:week= "星期一 ";break;
case 3:week= "星期二 ";break;
case 4:week= "星期三 ";break;
case 5:week= "星期四 ";break;
case 6:week= "星期五 ";break;


}
return week;
}

MessageBox.Show(date(2007,1,25));

输出的结果是:星期四


[解决办法]
对于何一天是星期几算法的程序时间都比较简单,而在我自己的实际项目中采用的是基姆拉尔森计算公式,所以我在这里给出基姆拉尔森计算公式的C#的实现:

// ************************************************
// str_week
//
/// <summary>
/// 返回谋年某月任意一天是星期几的描述

/// </summary>

//y:年,m:月,d:日。在参数都只传入相应的整数
// ********************************************/

private string str_week(int y,int m,int d){
int a=7; // 用来保存计算得到的星期几的整数
string str_date= " ";
if((m==1)||(m==2))//如果是一月或二月进行换算
{
m+=12;
y--;
}
a=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; //得到的星期几的整数
switch (a){
case 0:
str_date= "星期一 ";
break;
case 1:
str_date= "星期二 ";
break;
case 2:
str_date= "星期三 ";
break;
case 3:


str_date= "星期四 ";
break;
case 4:
str_date= "星期五 ";
break;
case 5:
str_date= "星期六 ";
break;
case 6:
str_date= "星期日 ";
break;
}
return str_date;
}


http://www.cnblogs.com/yice/archive/2005/09/02/228881.aspx
------------------------
我是倒的别人的贴,我很诚实的

热点排行