思路
分析
日期1:起始日期
日期2:最终日期
-
两个日期在同一年
1)日期2天数-日期1天数 -
不在同一年
1)计算间隔几年
2)这些间隔年份中是否有闰年
3)间隔年份天数+日期2天数-日期1天数
流程图
代码
#include<stdio.h>
int mdays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int sumdays(int year,int month,int day){
int days = 0,leap = 0;
if( (year%4==0 && year%100!=0) || year%400==0 )
{
leap = 1;
}
switch(month)
{
case 1:
days = day;
break;
case 2:
days += 31 + day;
break;
case 3:
days += 31 + (leap?29:28) + day;
break;
case 4:
days += 31 + (leap?29:28) + 31 + day;
break;
case 5:
days += 31 + (leap?29:28) + 31 + 30 + day;
break;
case 6:
days += 31 + (leap?29:28) + 31 + 30 + 31 + day;
break;
case 7:
days += 31 + (leap?29:28) + 31 + 30 + 31 + 30 + day;
break;
case 8:
days += 31 + (leap?29:28) + 31 + 30 + 31 + 30 + 31 + day;
break;
case 9:
days += 31 + (leap?29:28) + 31 + 30 + 31 + 30 + 31 + 31 + day;
break;
case 10:
days += 31 + (leap?29:28) + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;
break;
case 11:
days += 31 + (leap?29:28) + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;
break;
case 12:
days += 31 + (leap?29:28) + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day;
break;
}
return days;
}
int contrastYear(int year_one,int year_two){
if(year_one>year_two){
return 1;
}else{
return 0;
}
}
int contrastMonth(int month_one,int month_two){
if(month_one>month_two){
return 1;
}else{
return 0;
}
}
int main(){
int year_one,month_one,day_one,year_two,month_two,day_two;
int sums = 0,n = 0,y,m,d;
printf("--------------------------------------\n");
printf("日期格式:2020.1.1");
printf("请输入起始日期:");
scanf("%d.%d.%d",&year_one,&month_one,&day_one);
printf("\n请输入终止日期:");
scanf("%d.%d.%d",&year_two,&month_two,&day_two);
printf("--------------------------------------\n");
if(year_one<0 || month_one<=0 || month_one>12 || day_one<=0 || day_one>mdays[month_one-1]
|| year_two<0 || month_two<=0 || month_two>12 || day_two<=0 || day_two>mdays[month_two-1])//输入非法。
{
printf("输入年月日不合法\n");//提示并退出。
return -1;
}
if(contrastYear(year_one,year_two)){
y = year_one,
year_one = year_two;
year_two = y;
m = month_one;
month_one = month_two;
month_two = m;
d = day_one;
day_one = day_two;
day_two = d;
}
n = year_two - year_one;
if(n == 0){
if(contrastMonth(month_one,month_two)){
m = month_one;
month_one = month_two;
month_two = m;
d = day_one;
day_one = day_two;
day_two = d;
}
sums += sumdays(year_two,month_two,day_two);
sums -= sumdays(year_one,month_one,day_one);
}else{
while(n>0){
sums += 365;
if( ((year_one+n-1)%4==0 && (year_one+n-1)%100!=0) || (year_one+n-1)%400==0 ){
sums++;
}
n--;
}
sums += sumdays(year_two,month_two,day_two);
sums -= sumdays(year_one,month_one,day_one);
}
printf("结果为%d\n",sums);
printf("--------------------------------------\n");
}