如何计算两个已知日期(年 月 日)之间所相隔的天数?

计算两个已知日期之间所相隔的天数?

计算两个已知日期之间所相隔的天数?(入门C语言)

列如 1998 11 28 —— 2019 11 28 所得的天数
如图:
在这里插入图片描述
在这里说明一下:其实每个输入的 年 月 日,都可以用 for 循环替代的
喜欢精益求精的朋友可以尝试一下

小弟不才,新人刚入道,如果代码有任何错误与不合理之处欢迎各位 指正和批评! 感谢!

#include <stdio.h>
int Days(int year,int month,int day) {
 int sum,leap;
  switch(month) {
   case 1: sum=0;
   break;
   case 2: sum=31;
   break;
   case 3: sum=59;
   break;
   case 4: sum=90;
   break;
   case 5: sum=120;
   break;
   case 6: sum=151;
   break;
   case 7: sum=181;
   break;
   case 8: sum=212;
   break;
   case 9: sum=243;
   break;
   case 10: sum=273;
   break;
   case 11: sum=304;
   break;
   case 12: sum=334;
   break;
   default:printf("月份的输入有误!\n");
  }
 sum+=day;
 if(year%400==0 || (year%4==0 && year%100!=0)){
  leap=1;
  }
  else {
  leap=0;
  }
 if(leap==1 && month>2) {
  sum++;
 }
 return sum;
}
int Oneyear_days(int n) {   //计算一年中的总天数
 int totle_days;
 if(n%400==0 || (n%4==0 && n%100!=0)) {
  totle_days=366;
 }
 else {
  totle_days=365;
 } 
 return totle_days;
}
int Eveyears_days(int year1,int year2) {  //计算 两个年份中间相隔所有年份的天数
 int  i,sum,totle_sum=0;
 for(i=year1+1;i<year2;i++) { 
  if(i%400==0 || (i%4==0 && i%100!=0)) {
   sum=366;
  }
  else
   sum=365;
   
  totle_sum += sum;
 }
 return totle_sum;
}
int main() {
 int year1,month1,day1,year2,month2,day2,totle;
 printf("请输入所求两个日期的 年 月 日\n");
 scanf("%d %d %d %d %d %d",&year1,&month1,&day1,&year2,&month2,&day2);
 if(month1<1 || month1>12 || month2<1 || month2>12){
  printf("月份输入错误!\n");
  return 1;
 }
 if(day1>31 || day1<1 || day2>31 || day2<1){
  printf("天数输入有误\n");
  return 1;
 }
 
 printf(" 所求的为 %d年%d月%d日 - %d年%d月%d日 之间的天数\n",year1,month1,day1,year2,month2,day2);
 getchar();
 if(year1==year2){   //年份相等时候
  totle=Days(year2,month2,day2)-Days(year1,month1,day1);
 } 
 else    //年份不相等时候
  totle=Oneyear_days(year1)-Days(year1,month1,day1)+Days(year2,month2,day2)+Eveyears_days(year1,year2);
 
 printf("\n %d年%d月%d日 - %d年%d月%d日 之间共有%d天 \n",year1,month1,day1,year2,month2,day2,totle);
 
 return 0;
}

版权声明:本文为Jony_waming原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。