c实现任给两日期计算相隔天数问题

我的思路是先计算两整年相隔多少天,再减去日期小的那个日期那年已经过去的天数,最后加上日期大的那个日期那年已经过去的天数。


/* 标准文档模板 */

#include "stdio.h"

   int IsLeap(int year)//判断闰年。能被4整除且又能不能被100整除 是闰年,能直接被400整除也是闰年 
  {
     if(year%4==0&&year%100!=0||year%400==0)
     return 1;
     else return 0;
  }
 int PastedDaysOfThisYear(int y,int m,int d)//计算给出的年月日距离当年已经过了多少天 
  {
    int i,temp=d;
     for(i = 1;i < m; i++)
    {           
       if(IsLeap(y)==0)//平年 
       {
            switch (i)
            {
             case 1:case 3:case 5:case 7:case 8:case 10:case 12:  temp += 31;break;
             case 2:temp += 28;break;
             case 4:case 6:case 9 :case 11: temp += 30;break;
            }
       }
       else//闰年 
       {
            switch (i)
            {
             case 1:case 3:case 5:case 7:case 8:case 10:case 12:  temp += 31;break;
             case 2:temp += 29;break;
             case 4:case 6:case 9 :case 11: temp += 30;break;
            }
       }
    } 

    return temp;
  }
 
int PastedDaysBeforeThisYear(int yE,int yS)//计算任给的两年相差多少天 
{ int res = 0,i=1;
    if(yE - yS == 0)
          return res;
    else 
    { 
     while(yS+i <= yE) 
     {
        if(IsLeap(yS+i-1)) res += 366;
        else res+=365; 
         i++;
     }
       
    }       
    return res;
}

int days(long long e,long long s)//计算任给两个日期之间的相隔天数 
 {
     int y[2],m[2],d[2],sum;
       y[0] = e/10000;
       y[1] = s/10000;
       m[0] = e%10000/100;
       m[1] = s%10000/100;
       d[0] = e%10000%100;
       d[1] = s%10000%100;
       sum = PastedDaysBeforeThisYear(y[0],y[1])-PastedDaysOfThisYear(y[1],m[1],d[1])+PastedDaysOfThisYear(y[0],m[0],d[0]);
     return sum;
  }
  

void main()
{
   printf("%d", days(20131021,19981019));

   getch();
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值