#include <stdio.h>
int count_day ( int, int, int, int ); //年,月,日,標識。int leap ( int year );
int main ()
{
long year, day, day1, day2;
int s_year, s_month, s_day, e_year, e_month, e_day;//s爲起始的日期,e爲終止日期
while ( 1 )
{
printf ("輸入起始日期(年.月.日): ");
scanf ("%d.%d.%d", &s_year, &s_month, &s_day );
printf ("輸入終止日期(年.月.日): ");
scanf ("%d.%d.%d", &e_year, &e_month, &e_day );
//不一樣年的時間判斷//
if ( s_year < e_year )
{
day = count_day ( s_year, s_month, s_day , 0 );
for (year=s_year+1;year<e_year; year++ )//年份累加
if (leap(year))//遇到閏年
day += 366L;
else //平年
day += 365L;
day += count_day (e_year, e_month, e_day, 1);
}
//同一年的時間判斷
else if ( s_year == e_year )
{
day1 = count_day ( s_year, s_month, s_day, 1 );
day2 = count_day ( e_year, e_month, e_day, 1 );
day = day2-day1;//多的被減出來了
}
else
day = -1; //標識
if (day >= 0)
printf ("在%d.%d.%d - %d.%d.%d之間有%ld天\n", s_year, s_month, s_day, e_year, e_month, e_day , day );//輸出
else
printf ("時間是錯誤的!\n");
}
return 0;
}
//計算天數的核心//
int count_day ( int year, int month, int day, int flag )
{
static int day_tab[2][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}};
//二維數組存放天數
int p, i, s;
if (leap(year)) //閏年爲1選擇後面的用
p = 1;
else //平年爲0選擇前面的用
p = 0;
if (flag)
{
s = day;
for ( i = 1; i < month; i++ )
s += day_tab[p][i-1];//查詢數組累加天數
}
else
{
s = day_tab[p][month] - day;
for ( i = month + 1; i <= 12; i++ )
s += day_tab[p][i-1];
}
return ( s );//返回天數
}
//平閏年的判斷//
int leap(int year)
{
if ( year%4==0&&year%100!=0||year % 400 ==0)
return 1;
else
return 0;
}