用C语言计算日期可实现日期加减
#include"stdio.h"
#include <stdlib.h>
//闰年判定
int year_judge(int year){
int leap;
if(year%400==0||(year%4==0&&year%100!=0)){
leap = 1;
}
else{
leap = 0;
}
return leap;
}
//时间累加运算
int time_add(int x,int y,int z,int add)
{
int i,j,k,leap,week;
int add_number=add;
j = y;
i = x;
for(k=z;add_number>0;k++,add_number--)
{
leap=year_judge(x);
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
{
if(k==32)
{
k=1;
j+=1;
}
}
else if(j==4||j==6||j==9||j==11)
{
if(k==31)
{
k=1;
j+=1;
}
}
else if(j==2)
{
if(leap)
{
if(k==30)
{
k=1;
j+=1;
}
}
else
{
if(k==29)
{
k=1;
j+=1;
}
}
}
else if(j==13)
{
j=1;
i+=1;
}
}
printf("得出结果为:%d年%d月%d日\n",i,j,k);
week=week_compute(i,j,k);
week_write(week);
}
int time_sub(int x,int y,int z,int a,int b,int c)
{
int i,j,k,leap,week;
int sub_number=0;
leap=year_judge(x);
j = y;
i = x;
for(k=z;i<a||j<b||k<c;k++,sub_number++)
{
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
{
if(k==32)
{
k=1;
j+=1;
}
}
else if(j==4||j==6||j==9||j==11)
{
if(k==31)
{
k=1;
j+=1;
}
}
else if(j==2)
{
if(leap)
{
if(k==30)
{
k=1;
j+=1;
}
}
else
{
if(k==29)
{
k=1;
j+=1;
}
}
}
else if(j==13)
{
j=1;
i+=1;
}
}if(sub_number!=0)
{
return sub_number;
}else{
printf("时间错误\n");
}
}
//星期计算
int week_compute(int y,int m,int d)
{
int k=0;
k=1+(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
return k;
}
int week_write(int week)
{
printf("星期");
switch(week)
{
case 1:
printf("一\n");
break;
case 2:
printf("二\n");
break;
case 3:
printf("三\n");
break;
case 4:
printf("四\n");
break;
case 5:
printf("五\n");
break;
case 6:
printf("六\n");
break;
case 7:
printf("日\n");
break;
}
}
int time_judge(int x,int y,int z){
int leap=year_judge(x);
if (x>9999||x<1582)
{
printf("时间错误\n");
return 0;
}
else if (x==1582)
{
if (y<10||y>12)
{
printf("时间错误\n");
exit(0);
}
else if(y==10)
{
if (z<15||z>31)
{
printf("时间错误\n");
return 0;
}
}
}
if (y<1||y>12)
{
printf("时间错误\n");
return 0;
}
else if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
{
if(z<1||z>31)
{
printf("时间错误\n");
return 0;
}
}
else if(y==4||y==6||y==9||y==11)
{
if(z<1||z>30)
{
printf("时间错误\n");
return 0;
}
}
else if(y==2)
{
if(leap)
{
if(z<1||z>29)
{
printf("时间错误\n");
return 0;
}
}
else
{
if(z<1||z>28)
{
printf("时间错误\n");
return 0;
}
}
}
return 1;
}
//主函数
int main(int argc, const char *argv[])
{
int o,p,q,week;
int year,month,day,add,judge;
int year_s,month_s,day_s;
printf("****************************************************\n");
printf("* 1.日期加法 2.日期减法 0.退 出 *\n");
printf("* //本程序仅支持1582年10月15日之后的计算 *\n");
printf("****************************************************\n");
while(1){
printf("功能选择: ");
scanf("%d",&o);
switch(o)
{
case 1:
printf("输入被加年: ");
scanf("%d",&year);
printf("输入被加月: ");
scanf("%d",&month);
printf("输入被加日: ");
scanf("%d",&day);
p=time_judge(year,month,day);
if(p==0){
break;
}
printf("输入被加日期为:%d年%d月%d日",year,month,day);
week=week_compute(year,month,day);
week_write(week);
printf("输入增加天数: ");
scanf("%d",&add);
time_add(year,month,day,add);
break;
case 2:
printf("输入被减年: ");
scanf("%d",&year);
printf("输入被减月: ");
scanf("%d",&month);
printf("输入被减日: ");
scanf("%d",&day);
p=time_judge(year,month,day);
if(p==0){
break;
}
printf("输入被减日期为:%d年%d月%d日",year,month,day);
week=week_compute(year,month,day);
week_write(week);
printf("输入减法年: ");
scanf("%d",&year_s);
printf("输入减法月: ");
scanf("%d",&month_s);
printf("输入减法日: ");
scanf("%d",&day_s);
p=time_judge(year_s,month_s,day_s);
if(p==0){
break;
}
printf("输入减法日期为:%d年%d月%d日",year_s,month_s,day_s);
week=week_compute(year_s,month_s,day_s);
week_write(week);
q=time_sub(year,month,day,year_s,month_s,day_s);
printf("两者相距%d天\n",q);
break;
case 0:
exit(0);
default:
printf("功能错误\n");
}
}
}