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来代入公式计算。
以公元元年为参考,公元元年1月1日为星期一
程序如下:
/*利用基姆拉尔森计算日期公式 w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)*/
#include
const char * getWeekdayByYearday(int iY, int iM, int iD)
{
int iWeekDay = -1;
if (1 == iM || 2 == iM)
{
iM += 12;
iY--;
}
iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;
switch(iWeekDay)
{
case 0 : return "Sunday"; break;
case 1 : return "Monday"; break;
case 2 : return "Tuesday"; break;
case 3 : return "Wednesday"; break;
case 4 : return "Thursday"; break;
case 5 : return "Friday"; break;
case 6 : return "Saturday"; break;
default : return NULL; break;
}
return NULL;
}
int main()
{
int year,month,day;
char ch='1';
while(ch != '\033')
{
printf("\n请输入日期:\n格式为:1900,1,1\n");
scanf("%d,%d,%d",&year,&month,&day);
const char * p = getWeekdayByYearday(year, month, day);
printf("WeekDay : %s\n", p);
ch = getchar();
printf("\n");
}
}
请输入日期:
格式为:1900,1,1
2008,4,29
WeekDay : Tuesday
请输入日期:
格式为:1900,1,1
2015,2,4
WeekDay : Wednesday
请输入日期:
格式为:1900,1,1
内容转载为博客园
作 者:fengbohello
个人网站:http://www.fengbohello.top/
E-mail : fengbohello@foxmail.com
编写于:2024/11/14 14:19:53
发布 IP 属地:广东省深圳市
版权声明
阅读:133 点赞:0 留言:0
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来代入公式计算。
以公元元年为参考,公元元年1月1日为星期一
程序如下:
/*利用基姆拉尔森计算日期公式 w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)*/
#include
const char * getWeekdayByYearday(int iY, int iM, int iD)
{
int iWeekDay = -1;
if (1 == iM || 2 == iM)
{
iM += 12;
iY--;
}
iWeekDay = (iD + 1 + 2 * iM + 3 * (iM + 1) / 5 + iY + iY / 4 - iY / 100 + iY / 400) % 7;
switch(iWeekDay)
{
case 0 : return "Sunday"; break;
case 1 : return "Monday"; break;
case 2 : return "Tuesday"; break;
case 3 : return "Wednesday"; break;
case 4 : return "Thursday"; break;
case 5 : return "Friday"; break;
case 6 : return "Saturday"; break;
default : return NULL; break;
}
return NULL;
}
int main()
{
int year,month,day;
char ch='1';
while(ch != '\033')
{
printf("\n请输入日期:\n格式为:1900,1,1\n");
scanf("%d,%d,%d",&year,&month,&day);
const char * p = getWeekdayByYearday(year, month, day);
printf("WeekDay : %s\n", p);
ch = getchar();
printf("\n");
}
}
请输入日期:
格式为:1900,1,1
2008,4,29
WeekDay : Tuesday
请输入日期:
格式为:1900,1,1
2015,2,4
WeekDay : Wednesday
请输入日期:
格式为:1900,1,1
内容转载为博客园
作 者:fengbohello
个人网站:http://www.fengbohello.top/
E-mail : fengbohello@foxmail.com
编写于:2024/11/14 14:19:53
发布 IP 属地:广东省深圳市
版权声明
本站内容均来自网络转载或网友提供,如有侵权请及时联系我们删除!本站不承担任何争议和法律责任!
每一个童年的梦想都值得用青春去捍卫!