c语言 用库函数计算两日期相差的天数

如题所述

#include <stdio.h>
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;
}

/************************************************************************/
/* 判断闰年函数(4年一润,100年不润,400年再润) */
/************************************************************************/
int isPrime(int year)
{
if ((year%4==0&&year%100!=0)||(year%400==0))
{
return 1;
}
else
{
return 0;
}

}

int dateDiff(struct date mindate,struct date maxdate)
{
int days=0, flag=1;
const int primeMonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};
const int notPrimeMonth[12]={31,28,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;
}

int maxmonth,minmonth;
/************************************************************************/
/* 主要思路:拿2002-8-8 2005-2-22来说 */
/* 将2004-8-8---2005-2-22----2005-7-8 */
/*一前一后刚好N年,算出2005-2-22到2005-7-8的天数,然后用总年*36(5|6)减掉) */
/* 2002-9-8 2005-11-22 */
/* 2002-9-8-----2005-9-8-----2005-11-22(这次是加上后面天数) */
/*如何判断是加还是减呢?年大而月小的,则是减,程序中用flag标示 */
/************************************************************************/
if (maxdate.month<mindate.month)
{
maxmonth=mindate.month;
minmonth=maxdate.month;
flag=-1;
}
else
{
maxmonth=maxdate.month;
minmonth=mindate.month;
flag=1;
}

/************************************************************************/
/* 从mindate.year开始累加到maxdate.year */
/************************************************************************/
for(int j=mindate.year;j<maxdate.year;++j)
{
if (isPrime(j)==1)
{
days+=366;
}
else
days+=365;
}

/************************************************************************/
/* 从minmonth累加到maxmonth,分闰年和平年 */
/************************************************************************/
int day;
if(isPrime(maxdate.year)==1)
{

for(int i=minmonth;i<maxmonth;i++)
{
day=primeMonth[i-1]*flag;
days=days+day;
}
days=days+maxdate.day-mindate.day;
}
else
{
for (int i=minmonth;i<maxmonth;i++)
{
day=notPrimeMonth[i-1]*flag;
days=days+day;
}
days=days+maxdate.day-mindate.day;
}
return days;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-24
给你写了一个程序,应该能看懂的:

#include <stdio.h>
#include <time.h>
#include <memory.h>

int main(void)
{
time_t t1;
time_t t2;

struct tm OldTime;
struct tm NewTime;

memset(&OldTime,0x0,sizeof(tm));
OldTime.tm_year = 110;// 2010 年表示为 2010 - 1900 = 110
OldTime.tm_mon = 12;
OldTime.tm_mday = 6;

memset(&NewTime,0x0,sizeof(tm));
NewTime.tm_year = 111;// 2011 年表示为 2011 - 1900 = 111
NewTime.tm_mon = 12;
NewTime.tm_mday = 6;

t1 = mktime(&NewTime); //2011-12-6
t2 = mktime(&OldTime); //2010-12-6

printf("%d",(t1-t2)/(24*3600));

return 0;
}本回答被提问者采纳
第2个回答  2011-12-06
思路。
1.计算两个日期相隔的年数。
判断相隔年数里,出现了几个闰年,几个平年,然后计算跨年的天数。要小心,不要多算了一年哦。
2.计算不足一年,另外再相隔的月数。
注意,看是否其中有2月
3.不足一月,相隔的天数。
三者都换算成天数,相加!
第3个回答  2018-03-13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>

int  get_days(const char* from, const char* to);
time_t convert(int year,int month,int day);

int main()
{
    const char* from="2013-3-15";
const char* to="2015-8-14";
int days=get_days(from,to);

printf("From:%s\nTo:%s\n",from,to);
printf("%d\n",days);

return 0;
}

time_t convert(int year,int month,int day)
{
struct tm info={0};
info.tm_year=year-1900;
info.tm_mon=month-1;
info.tm_mday=day;
return mktime(&info);
}

int  get_days(const char* from, const char* to)
{
int year,month,day,fromSecond,toSecond;
sscanf(from,"%d-%d-%d",&year,&month,&day);
fromSecond=(int)convert(year,month,day);
sscanf(to,"%d-%d-%d",&year,&month,&day);
toSecond=(int)convert(year,month,day);
return (toSecond-fromSecond)/24/3600;
}

From:2013-3-15
To:2015-8-14
882
Press any key to continue
   
 这才算是用了库函数了···

第4个回答  推荐于2018-03-14

提供网上代码供参考,该代码引入 time.h 头文件:

#include <stdio.h>
#include <time.h>

int datediff(int y1,int m1,int d1,int y2,int m2,int d2){
struct tm ptr1;
ptr1.tm_sec=10;
ptr1.tm_min=10;
ptr1.tm_hour=10;
ptr1.tm_mday=d1;
ptr1.tm_mon=m1-1;
ptr1.tm_year=y1-1900;   
time_t st1=mktime(&ptr1);
struct tm ptr2;
ptr2.tm_sec=10;
ptr2.tm_min=10;
ptr2.tm_hour=10;
ptr2.tm_mday=d2;
ptr2.tm_mon=m2-1;
ptr2.tm_year=y2-1900;   
time_t st2=mktime(&ptr2);
return (int)((st2-st1)/3600/24);
}

int main (void){
int t=datediff(2015,1,9,2015,2,18);
printf("%d",t);
return 0;
}

本回答被网友采纳

C语言中如何计算时间差
t1.tm_min = time1[4];t2.tm_year = time2[0] + 100;t2.tm_mon = time2[1];t2.tm_mday = time2[2];t2.tm_hour = time2[3];t2.tm_min = time2[4];_t1 = _mkgmtime( &t1 );_t2 = _mkgmtime( &t2 );diff = difftime(_t2, _t1 );printf( "相差 %.0f 分...

C语言中 求两个日期间的天数
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...

求一C语言程序,计算给定的两日期之间的天数,用时间函数做,日期为结构...
2、根据年判断出,是平年还是闰年,也就知道了当年2月份的天数。3、计算出两个日期间的天数。

dateDiff是哇C语言的库函数吗
for (i=0;i<M;i++) JD+=MonthDay[i];if (((Y%4==0)&&(Y%100!=0)||(Y%400==0)) && (M>2)) JD++;return JD;} 自己的函数中用:int diff;diff = YMD(Y,date1.month,date1.day) - YMD(Y,date2.month,date2.day);就有了天数差,return diff; 就可以了。Y 要预知...

c语言编程,怎么计算时间
tm_year = time2[0] + 100;t2.tm_mon = time2[1];t2.tm_mday = time2[2];t2.tm_hour = time2[3];t2.tm_min = time2[4];_t1 = _mkgmtime( &t1 );_t2 = _mkgmtime( &t2 );diff = difftime(_t2, _t1 );printf( "相差 %.0f 分钟\\n", diff \/ 60 );} ...

c语言什么情况需要调用数学函数库
当你调用的数学函数是由标准库中的数学函数库提供时。如求绝对值的函数就是由“math.h”库提供的。也就是你调用到了标准库的函数就要引用标准库头文件,如printf()就要调用“stdio.h”,当然有时编译器是默认包含"stdio.h"。

关于C\/C++ 的日期和时间
早期,C语言通过time()获取自Unix纪元(1970-01-01 00:00:00 UTC)的秒数,difftime()计算两个时间差。然而,time()的精度只有到秒,对于需要毫秒甚至纳秒级精度的场景,Windows的Sleep()或Linux的gettimeofday()函数就派上用场,Linux下还可选择clock_gettime()和timespec_get()获取纳秒级时间。在...

输入年月日判断这一天是这一年的第几天 ?(C语言编写)!
if(m==2){\/\/2月是29天 return(31+d);}else if(m>2){ c=0;m=m-1;for(;m>0;m--){ if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){ c+=31;}else if(m==2){ c+=29;}else{ c+=30;} } return c+d;}else{ return d;} }else{\/\/平年 if(m==...

C语言编程:输入某年某月某日,判断这一天是这一年的第几天?
if(m==2){\/\/2月是29天 return (31+d);}else if(m>2){ c=0;m=m-1;for(;m>0;m--){ if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){ c+=31;}else if(m==2){ c+=29;}else{ c+=30;}} return c+d;}else{ return d;} }else{\/\/平年 if(m==...

C语言函数的时间日期函数
函数库为time.h、dos.h在时间日期函数里,主要用到的结构有以下几个:总时间日期贮存结构tm┌──────────────────────┐│struct tm ││{ ││ int tm_sec; \/*秒,0-59*\/ ││ int tm_min; \/*分,0-59*\/ ││ int tm_hour; \/*时,0-23*\/ │...

相似回答