日期计算C语言

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

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值