/*
功能:日期判断
日期:2013-06-09
*/
#include<stdio.h>
#include<stdlib.h>
int isLeapYear(int iYear);
int dayofWeek(int iYear,int iMonth,int iDay);
int weekofYear(int iYear,int iMonth, int iDay);
int main(void)
{
int iYear,iMonth,iDay;
printf("请输入一个日期(“年-月-日”形式):");
scanf("%d-%d-%d",&iYear,&iMonth,&iDay);
printf("%d年%d月%d日属于%d年的第%d个星期。n",iYear,iMonth,iDay,iYear,weekofYear(iYear,iMonth,iDay));
system("pause");
return 0;
}
//参数:int iYear 待判断的一个年份
//返回:int 若iYear是闰年,则返回1,否则返回0;
int isLeapYear(int iYear)
{
if((iYear%4)&&(iYear%100)||(iYear%400))
{
return 1;
}
else
{
return 0;
}
}
//功能:判断一个日期是一周中的星期几
//参数:int iYear 年份
// int iMonth 月份
// int iDay 日期
//返回:int 返回当前日期是一周中的星期几
int dayofWeek(int iYear,int iMonth,int iDay)
{
int i,days=0,weekDay;
int days1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(0==isLeapYear(iYear))
{
for(i=0;i<iMonth-1;i++)
{
days=+days1[i];
}
days+=iDay;
}
else
{
if (iMonth>2)
{
for(i=0;i<iMonth-1;i++)
{
days=+days1[i];
}
days+=iDay+1;
}
else
{
for(i=0;i<iMonth-1;i++)
{
days=+days1[i];
}
days+=iDay;
}
}
weekDay=((iYear-1)+(iYear-1)/4 -( iYear-1 /100 )+( iYear-1 / 400 ) + days) % 7;
switch (weekDay)
{ case 0: weekDay = 1;break;
case 1: weekDay = 2;break;
case 2: weekDay = 3;break;
case 3: weekDay = 4;break;
case 4: weekDay = 5;break;
case 5: weekDay = 6;break;
case 6: weekDay = 7;break;
}
}
//功能:判断一个日期是这一年中的第几个星期
//参数:int iYear 年份
// int iMonth 月份
// int iDay 日期
//返回:第几个星期
int weekofYear(int iYear,int iMonth, int iDay)
{
int weekOfYear,days=0,i;
int days1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(0==isLeapYear(iYear))
{
for(i=0;i<iMonth-1;i++)
{
days=+days1[i];
}
days+=iDay;
}
else
{
if (iMonth>2)
{
for(i=0;i<iMonth-1;i++)
{
days=+days1[i];
}
days+=iDay+1;
}
else
{
for(i=0;i<iMonth-1;i++)
{
days=+days1[i];
}
days+=iDay;
}
}
weekOfYear= (int) ((days-dayofWeek(iYear,1,1)+6.3)/7)+1;
}