用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");
?? ?}
?? ?}
}
|