C++ 计算任意两个日期之间的天数

C++写的一个计算两个日期之间天数的小程序:

[cpp] view plain copy
 
  1. #include <Windows.h>  
  2. #include <stdio.h>  
  3.   
  4.   
  5. struct tagDate  
  6. {   
  7.     int year;  
  8.     int month;  
  9.     int day;  
  10. };  
  11.   
  12. //设置日期  
  13. void SetDate(int y, int m, int d, tagDate *date)  
  14. {   
  15.     date->year = y;  
  16.     date->month = m;  
  17.     date->day = d;  
  18. }   
  19.   
  20. //是否闰年  
  21. int IsLeapYear(int year)    
  22. {   
  23.     return ((year%4==0) && (year%100!=0)||year%400==0);   
  24. }   
  25.   
  26. //得到date.month的最大天数  
  27. int GetLastDay(tagDate date)   
  28. {   
  29.     int num;  
  30.     switch(date.month)   
  31.     {  
  32.     case 1:  
  33.     case 3:  
  34.     case 5:  
  35.     case 7:  
  36.     case 8:  
  37.     case 10:  
  38.     case 12:  
  39.         num=31;  
  40.         break;  
  41.     case 2:  
  42.         num = 28+IsLeapYear(date.year);   
  43.         break;   
  44.     default:   
  45.         num = 30;   
  46.     }   
  47.     return num;   
  48. }  
  49.   
  50. //日期是否合法  
  51. int IsDateValid(tagDate date)  
  52. {   
  53.     if(date.year <0 || date.month <1 || date.month> 12)   
  54.         return 0;  
  55.   
  56.     if(date.day <1 || date.day> GetLastDay(date))  
  57.         return 0;  
  58.   
  59.     return 1;  
  60. }   
  61.   
  62. //date+1  
  63. void AddDay(tagDate *date)  
  64. {  
  65.     date->day++;  
  66.     if(date->day > GetLastDay(*date))  
  67.     {  
  68.         date->day = 1;  
  69.         date->month++;  
  70.         if(date->month > 12)  
  71.         {  
  72.             date->month = 1;  
  73.             date->year++;  
  74.         }  
  75.     }  
  76. }  
  77.   
  78. //date1比date2小返回值为1,否则为0  
  79. int Compare(tagDate date1, tagDate date2)  
  80. {  
  81.     if(date1.year < date2.year)  
  82.         return 1;  
  83.     if(date1.year <= date2.year && date1.month < date2.month)  
  84.         return 1;  
  85.     if(date1.year <= date2.year && date1.month <= date2.month && date1.day < date2.day)  
  86.         return 1;  
  87.   
  88.     return 0;  
  89. }   
  90. //计算两个日期的间隔天数  
  91. long DateDiff(tagDate date1, tagDate date2)  
  92. {  
  93.     long delta = 0;  
  94.     tagDate date3;  
  95.     //若date1 > date2,交换date1,date2  
  96.     if(!Compare(date1, date2))  
  97.     {  
  98.         date3 = date2;  
  99.         date2 = date1;  
  100.         date1 = date3;  
  101.     }  
  102.   
  103.     //date1比date2少时,date1日期加1  
  104.     while(Compare(date1,date2))  
  105.     {  
  106.         AddDay(&date1);  
  107.         delta++;  
  108.     }  
  109.     return delta;  
  110. }   
  111.   
  112. void main()  
  113. {  
  114.     tagDate date1, date2;  
  115.     int y, m, d;  
  116.       
  117.     system("cls");  
  118.     while(1)  
  119.     {  
  120.         puts(" Input   date1  ");  
  121.         scanf("%d,%d,%d", &y, &m, &d);  
  122.         SetDate(y, m, d, &date1);  
  123.         if(!IsDateValid(date1))  
  124.         {   
  125.             puts( "date1   is   invalid !");  
  126.             exit(1);  
  127.         }  
  128.   
  129.         puts(" Input   date2  ");  
  130.         scanf("%d,%d,%d", &y, &m, &d);  
  131.         SetDate(y, m, d, &date2);  
  132.         if(!IsDateValid(date2))  
  133.         {  
  134.             puts( "date2   is   invalid !");  
  135.             exit(1);  
  136.         }  
  137.         //  
  138.         printf(" Result : [%ld]", DateDiff(date1,date2));  
  139.     }  
  140. }  

https://blog.csdn.net/hellokandy/article/details/52194332

原文地址:https://www.cnblogs.com/findumars/p/8732310.html