计算两日期之间的天数

时间:2022-10-19 16:33:20 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

//////////////////////////////////////////////////////////////////////////////////////////////////////

//该程序是计算任意两个日期之间的天数,程序思路为:先计算各个日期在当年的天数,再加上两年份之间的天数//

//////////////////////////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>

bool LeapYear(int year); //闰年计算

int DayInThisYear(int year,int month,int day); //验证日期合格和计算该日期在当年的天数

int Betweendate(int Days_1,int Days_2,int year_1,int year_2); //计算两日期之间天数

//////////////////////////////////////////////////////////////

int main(void)

{

int year_1,month_1,day_1,year_2,month_2,day_2,Days_1,Days_2;

printf("FirstDate date(yyyy-mm-dd):");

scanf("%d-%d-%d",&year_1,&month_1,&day_1);

printf("SecondDate date(yyyy-mm-dd):");

scanf("%d-%d-%d",&year_2,&month_2,&day_2);

if((Days_1=DayInThisYear(year_1,month_1,day_1))!=-1&&(Days_2=DayInThisYear(year_2,month_2,day_2))!=-1)

printf("%d-%d-%d到%d-%d-%d天数为%d\n",\

year_1,month_1,day_1,year_2,month_2,day_2,Betweendate(Days_1,Days_2,year_1,year_2));

else

printf("输入的日期格式有误\n");

return 1;

}

////////////////////////////////////////////////////////////

bool LeapYear(int year) //闰年计算

{

return (year%4==0&&year%100!=0||year%400==0);

}

////////////////////////////////////////////////////////////

int DayInThisYear(int year,int month,int day) //验证日期合格和计算该日期在当年的天数

{

int monthdate[12]={31,28,31,30,31,30,31,31,30,31,30,31};

if(LeapYear(year))

monthdate[1]=29;

if(year>0&&month>0&&month<=12&&day>0&&day<=monthdate[month]) //验证日期

{

for(int i=0;i<month-1;i++)

day+=monthdate[i];

}

else

return -1;

return day;

}

/////////////////////////////////////////////////////////////

int Betweendate(int Days_1,int Days_2,int year_1,int year_2) //计算两日期之间天数

{

int temp,day;

if(year_1==year_2) //年份相同的情况下为两个日期在当年的天数之差

return Days_1>Days_2 ? Days_1-Days_2 : Days_2-Days_1;

else

{

if(year_1<year_2) //将year_1置为较大的年份,year_2置为较小的年份

{

temp=year_1;

year_1=year_2;

year_2=temp;

}

if(LeapYear(year_2)) //计算较小年份在当年余下的天数

day=366-Days_2;

else

day=365-Days_2;

for(;year_2+1!=year_1;year_2++) //计算两年份之间的天数

{

if(LeapYear(year_2))

day+=366;

else

{

day+=365;

}

}

}

return day+Days_1; //结果加上较大年份的日期

}

///////////////////----By huaixiaozizhuaizhuai Neusoft----//////////////////////

本文来源:https://www.wddqw.com/doc/4df0c7732af90242a995e558.html