C语言计算任意两日期之间天数

今天复习了会Program in c,有道题目计算任意两个日期之间的天数:

想了好久,最后写了一个很挫的程序.....

#include 
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

如果发现有错,请告诉我哦!!!!

测试一下,这里用mysql的datediff函数测试:


我的:




我的:


可能你测试的时候会发现,和mysql偏差一天,这我真不知道,也许是程序的问题吧,呵呵


突然发现,我想的有点问题,为什么不计算两个年份的日期到1月1号的日期呢,然后相减,哦,我想的有点复杂了,顺便将代码写的紧凑点.

#include 
#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



你可能感兴趣的:(C语言计算任意两日期之间天数)