问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样求二个日期之间的天数?

发布网友 发布时间:2022-04-26 05:00

我来回答

2个回答

热心网友 时间:2022-06-20 22:57

#include <stdio.h>

int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31}; /*储存12个月的天数*/
void main()
{
int spec_year(int);
void scan(int *year,int *month,int *day);
long com_year(int y1,int y2);
int com_month(int y1,int m1,int y2,int m2);
int com_day(int y1,int m1,int d1,int y2,int m2,int d2);

int year1,month1,day1;
int year2,month2,day2;

long sum=0;
int k=0;

/*输入两个日期,做合法性检查*/
printf("Enter the first date,like 1988 11 30:");
scan(&year1,&month1,&day1);
printf("Enter the second date,like 1988 11 30:");
scan(&year2,&month2,&day2);

/*当输入的第一个日期比第二个日期大时,将二者对换*/
if((year1>year2)||((year1==year2)&&(month1>month2))||((year1==year2)&&(month1==month2)&&(day1>day2)))
{
int temp;
temp=year1;year1=year2;year2=temp;
temp=month1;month1=month2;month2=temp;
temp=day1;day1=day2;day2=temp;
}

/*计算两个日期之间的天数*/
sum+=com_year(year1,year2); /*计算两个年份之间的天数*/
sum+=com_month(year1,month1,year2,month2); /*计算两个月份之间的天数*/
sum+=com_day(year1,month1,day1,year2,month2,day2); /*计算两天之间的天数*/

/*输出*/
printf("There are %ld days between them.\n",sum);
}

void scan(int *year,int *month,int *day) /*输入日期函数,合法性判断*/
{
int k=0;
do
{
if(k!=0)
printf("\nWrong date!\n");
k++;
/*printf("Please write down the day,like 1988 11 30:");*/
scanf("%d%d%d",year,month,day);
if(spec_year(*year))
mon[1]=29;
}while(*day>mon[*month-1]||*month>13||*year<1900||*year>3000);
mon[1]=28;
}

long com_year(int y1,int y2) /*计算两个年份之间的天数*/
{
int i;
long sum=0;
for(i=y1+1;i<y2;i++)
{
if(spec_year(i))
sum+=366;
else
sum+=365;
}
return sum;
}

int com_month(int y1,int m1,int y2,int m2) /*计算两个月份之间的天数*/
{
int i;
int sum=0;
if(y1!=y2)
{
if(spec_year(y1))
{
mon[1]=29;
}
if(m1!=m2)
{
for(i=m1;i<12;i++)
{
sum+=mon[i];
}
mon[1]=28;

if(spec_year(y2))
{
mon[1]=29;
}

for(i=0;i<m2-1;i++)
{
sum+=mon[i];
}
mon[1]=28;
}
else
{
for(i=m1-1;i<12;i++)
{
sum+=mon[i];
}
mon[1]=28;

if(spec_year(y2))
{
mon[1]=29;
}

for(i=0;i<m2-1;i++)
{
sum+=mon[i];
}
mon[1]=28;
}
}
else
{
if(spec_year(y1))
{
mon[1]=29;
}
for(i=m1;i<m2-1;i++)
{
sum+=mon[i];
}
mon[1]=28;
}
return sum;
}

int com_day(int y1,int m1,int d1,int y2,int m2,int d2) /*计算两天之间的天数*/
{
int i;
int sum=0;

if(m1!=m2)
{
if(spec_year(y1))
{
mon[1]=29;
}

sum+=(mon[m1-1]-d1);

sum+=d2;

mon[1]=28;
}
else
{
sum+=d2-d1;

}

return sum;
}

int spec_year(int year) /*判断是否为闰年*/
{
if((year%400==0)||((year%4==0)&&(year%100!=0)))
return 1;
else
return 0;
}

热心网友 时间:2022-06-20 22:57

两组数相减之后再减一
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
北京协和售后 spcp代收费是什么 Doppelherz/双心 铁元营养口服液 500ml-详细介绍 淘宝阿尔卑斯店的德国铁元怎么样? 后面的肩膀缝疼因为什么 刮痧后一躺下肩膀疼的要命 “亭台六七座”的出处是哪里 mahini 是什么意思? 外阴溃烂了怎么办 外阴溃疡,溃疡处伤口不愈合,可以用什么药 红糖干结怎么办 熔化后的红糖一会儿又变硬了,怎么办? 红糖风干成砣了怎么办 红糖干了怎么办 红糖干成块了很硬,怎么能把它弄成粉状啊? 买的时候红糖就结块,发硬,是不是正宗红糖 红糖开袋后,方两天就会干硬。怎么存放才能让它不干? 我家红糖放久了结硬块了,怎么办? 红糖变硬了,怎么办? 红糖变硬了还能吃吗 红糖变硬怎么办?? 马铃薯加工成粉条,都需要哪些设备? 想加工土豆淀粉和红薯淀粉需要什么设备,需要投资多少钱? 广州97中学在那里 从深圳宝安黄田做什么车宝安八区前进一路97号友谊书城 从江宁区竹山路97号怎么去火车站 西宁到拉萨自驾游公里数?沿途有97号汽油没?在线等 谢谢 广州市白云区永平街永康路97号是哪里? 从茶店子到成都市青羊区锦屏路97号 成都市人民南路一段97号现代之窗9楼37号属于哪个区 计算两个日期多少天 怎么计算两个日期的天数,如2018/2/21到2018/3/5多少天 在一个单元格的两个日期计算天数,一年按360天算? excel:关于两个日期的天公式 excel表格如何计算两个日期相差多少天 C语言求两个日期相差的天数 两个日期之间的天数 怎么求java,2个日期之间有多少天。。 excel 如何计算两个日期天数的个数 从键盘输入两个日期算出这两个日期相差多少天。求java程序代码! 我国的基本政策制度是什么? 我国农村教育政策有哪些 未来农村教育将会有怎样的前景? 农村教育现状要如何改善? 农村教育的根本,到底是什么呢? 国内农村的教育事业,你认为有哪些需要改善的? 针对农村家庭教育存在的问题,该如何解决? 农村教育和城市教育,有哪些较大的区别呢? 农村教育的现状,大家是怎么样看待的呢? 如何来改变农村教育的现状