計算兩個日期的時間差,輸出它們之間的天數

#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; 
}
相關文章
相關標籤/搜索