#include <stdio.h>
#include <stdlib.h>
//日期结构体
typedef struct D
{
int year;
int month;
int day;
}Date;
int getDays(Date date1,Date date2);
int IsLeapYear(int year) ;
int GetMaxDay(int year,int month);
//主函数
int main(int argc,char** argv)
{
int days;
Date start,end;
printf("请输入第一个日期(1949.10.1):");
scanf("%d.%d.%d",&start.year,&start.month,&start.day);
printf("请输入第二个日期(1949.10.1):");
scanf("%d.%d.%d",&end.year,&end.month,&end.day);
days=getDays(start,end);
printf("两个日期间隔着%d天\n",days);
system("pause");
return 0;
}
//判断是否是闰年
int IsLeapYear(int year)
{
return (year % 400 == 0 || year % 4 == 0 && year % 100 != 0);
}
//获得某年某月的最大天数
int GetMaxDay(int year,int month)
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return IsLeapYear(year)?29:28;
default:
return -1;
}
}
int getDays(Date date1,Date date2)
{
int days=0; //预留中间求和使用
if(date1.year==date2.year && date1.month==date2.month && date1.day==date2.day)
return 0;
else
{
if(date1.year==date2.year && date1.month==date2.month) //同一年同一个月中的两天
{
days=date2.day-date1.day;
return days;
}
else if(date1.year==date2.year) //同一年不同月
{
int start_maxday=GetMaxDay(date1.year,date1.month);
days = start_maxday-date1.day;
if(date2.month==date1.month+1) //结束月是起始月之后的一个月
{
days+=date2.day;
return days;
}
else //同年,不同月,且结束月不是起始月之后挨着的一个月
{
int m=date2.month,n=date1.month+1;
if(n!=m)
{
days+=GetMaxDay(date1.year,n);
n++;
}
days+=date2.day;
return days;
}
}
}
}
实例24 计算一年内两天间隔天数
最新推荐文章于 2022-05-01 12:01:37 发布