C语言中的time.h有没有函数可以计算出两日期间的天数

发布网友 发布时间:2022-04-20 13:14

我来回答

3个回答

热心网友 时间:2023-11-03 06:52

的确没有,我自己写了一下,觉得还是有点繁的,代码此下:
#include <stdio.h>
#define isPrime(year) ((year%4==0&&year%100!=0)||(year%400==0))
struct date
{
int year;
int month;
int day;
};
int main(void)
{
//int isPrime(int year);
int dateDiff(struct date mindate,struct date maxdate);
struct date mindate,maxdate;
int days;

printf("please input the one date:");
scanf("%i-%i-%i",&mindate.year,&mindate.month,&mindate.day);
printf("please input other day:");
scanf("%i-%i-%i",&maxdate.year,&maxdate.month,&maxdate.day);

days=dateDiff(mindate,maxdate);
printf("the day is:%d\n",days);
return 0;
}

int dateDiff(struct date mindate,struct date maxdate)
{
int days=0,j,flag;
const int primeMonth[][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
/************************************************************************/
/* 交换两个日期函数,将小的日期给mindate,将大的日期给maxdate */
/************************************************************************/
struct date tmp;
if ((mindate.year>maxdate.year)|| (mindate.year==maxdate.year&&mindate.month>maxdate.month)||(mindate.year==maxdate.year&&mindate.month==maxdate.month&&mindate.day>maxdate.day))
{
tmp=mindate;
mindate=maxdate;
maxdate=tmp;
}
/************************************************************************/
/* 从mindate.year开始累加到maxdate.year */
/************************************************************************/
for(j=mindate.year;j<maxdate.year;++j)
days+=isPrime(j)?366:365;

//如果maxdate.year是闰年,则flag=1,后面调用primeMonth[1][12]
flag=isPrime(maxdate.year);
//加上maxdate.month到1月的天数
for (j=1;j<maxdate.month;j++)
days+=primeMonth[flag][j-1];

//减去mindate.month到1月的天数
for (j=1;j<mindate.month;j++)
days-=primeMonth[flag][j-1];

days=days+maxdate.day-mindate.day;
return days;
}

详细请看我的Blog:http://blog.csdn.net/yueguanghai/article/details/7592274

热心网友 时间:2023-11-03 06:52

没有,都是计算日历时间和当地时间的,已经两者之间的转换。

热心网友 时间:2023-11-03 06:53

要自己计算的,有些书上有类似的例程,比如输入一个日期,求出该日是该年的第几天,或者求出第二天的日期

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com