程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> C語言小程序 如何判斷兩個日期之差

C語言小程序 如何判斷兩個日期之差

編輯:更多關於編程
    輸入兩個日期,計算之間相差多少天。 用了兩種方法實現,第二種利用結構體,代碼比較清晰,其余的都一樣  

    1.普通的寫法

    復制代碼 代碼如下:
    #include <stdio.h>
    int leapyear(int year)
    {
     if((year%4==0 && year%100!=0) || year%400==0)
      return 1;
     else
      return 0;
    }
    int days(int *day1, int *day2)
    {
     int i=0;
     int *tmp;
     int diff = 0;
     const int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     if(day1[0] == day2[0])
     {
      if(day1[1] == day2[1])
      {
       diff = day1[2] - day2[2];
       diff = (diff < 0)?(-diff):diff;
      }
      else
      {
       if(day1[1] < day2[1])    //day1=1991-5-8   day2=1991-6-2
       {
        tmp = day1;      //day1=1991-6-2   day2=1991-5-8
        day1 = day2;
        day2 = tmp;
       }
       for(i=day2[1]+1; i<day1[1]; i++)
       {
        diff +=  month[i];
       }
       diff += month[day2[1]] - day2[2] + day1[2];
       if(day2[1] <= 2 && day1[1] >2)
        if(leapyear(day2[0]))
         diff++;
      }
     }
     else
     {
      if(day1[0] < day2[0])
      {
       tmp = day1; 
       day1 = day2;
       day2 = tmp;
      }
      for(i=day2[0]+1; i<day1[0]; i++)
      {
       if(leapyear(i))
        diff += 366;
       else
        diff += 365;
      }
      for(i=day2[1]+1; i<=12; i++)     //day1=1992-1-1   day2=1991-1-1
      {
       diff += month[i];
      }
      diff += (month[day2[1]] - day2[2]);
      if(day2[1] <= 2)
       if(leapyear(day2[0]))
        diff++;
      for(i=1; i<day1[1]; i++)
      {
       diff += month[i];
      }
      diff += day1[2];
      if(day1[1] > 2)
       if(leapyear(day1[0]))
        diff++;
     }
     return diff;
    }
    int main()
    {
     int day1[3], day2[3];
     int day = 0;
     printf("輸入日期:");
     scanf("%d-%d-%d",&day1[0], &day1[1], &day1[2]);
     printf("輸入另一個日期:");
     scanf("%d-%d-%d",&day2[0], &day2[1], &day2[2]);
     day = days(day1, day2);
     printf("兩個日期之間共有%d天。n",day);
     return 0;
    }


    2.利用結構體,代碼更整潔一些

    復制代碼 代碼如下:
    #include <stdio.h>
    typedef struct date
    {
     int year;
     int month;
     int day;
    }DATE;
    int leapyear(int year)
    {
     if((year%4==0 && year%100!=0) || year%400==0)
      return 1;
     else
      return 0;
    }
    int compare(DATE *d1, DATE *d2)    //如果第一個日期比第二個日期大,交換日期
    {
     DATE *tmp;
     if(d1->year == d2->year)    //年數相等
     {
      if(d1->month > d2->month)   //月數相等
      {
       tmp = d1;
       d1 = d2;
       d2 = d1;
      }
      else if(d1->month == d2->month)  //日期相等
      {
       if(d1->day > d2->day)
       {
        tmp = d1;
        d1 = d2;
        d2 = d1;
       }
      }
     }
     else if(d1->year > d2->year)
     {
      tmp = d1;
      d1 = d2;
      d2 = tmp;
     }
     return 0;
    }
    int diff(DATE *date1, DATE *date2)
    {
     int i;
     int diff = 0;
     const int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     if(date1->year == date2->year)
     {
      if(date1->month == date2->month)
      {
       diff = date2->day - date1->day;
      }
      else
      {
       for(i=date1->month+1; i<date2->month; i++)
       {
        diff += month[i];
       }
       diff += month[date1->month] - date1->day + date2->day;
       if(leapyear(date1->year))
        if(date1->month <=2 && date2->month >2)
         diff++;
      }
     }
     else
     {
      for(i=date1->year+1; i<date2->year; i++)
      {
       if(leapyear(i))
        diff += 366;
       else
        diff += 365;
      }
      for(i=date1->month+1; i<=12; i++)    //date1距離年末多少天
      {
       diff += month[i];
      }
      diff += month[date1->month] - date1->day;
      if(date1->month <= 2)
       if(leapyear(date1->year))
        diff++;
      for(i=1; i<date2->month; i++)     //date2距離年初多少天
      {
       diff += month[i];
      }
      diff += date2->day;
      if(date1->month > 2)
       if(leapyear(date2->year))
        diff++;
     }
     return diff;
    }
    int main()
    {
     int days = 0;
     DATE day1, day2;
     DATE *date1, *date2;
     date1 = &day1;
     date2 = &day2;
     printf("輸入日期:");
     scanf("%d-%d-%d",&(date1->year), &(date1->month), &(date1->day));
     printf("輸入另一個日期:");
     scanf("%d-%d-%d",&date2->year, &date2->month, &date2->day);
     compare(date1, date2);
     days = diff(date1, date2);
     printf("兩個日期之間共有%d天。n",days);
     return 0;
    }
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved