1. 程式人生 > >如何計算兩個(年-月-日)中間的間隔天數

如何計算兩個(年-月-日)中間的間隔天數

相等 return 存在 ace hide 計數 opened end pre

給出任意兩個時間,計算其間隔天數應該如何進行? 思路一: 以日期較小的一個為參考對象,然後將日期一天天的加上去,直到和第二個日期完全相等,設置一個計數器(day++)來統計天數。 思路二: 上邊的問題是將整個問題視為一個整體進行解決,那麽正是因為問題的復雜性,為了使用編程來更好的模塊化解決,我們引入參考日期(1900-01-01)。將兩個日期都與參考日期進行對比,計算出天數差。而後根據天數差做一個減法,得到二者之間的天數差。 思路三: 在思路二的基礎上進一步進行改進。(思路二存在的問題是若詢問的日期是小於參考日期的,則會出現負數,這將給問題的解決帶來不必要的麻煩)我們將兩個要查詢的日期都和他們對應的年份的一月一號作為基準的參考日期,然後計算出三個天數差(其中有兩個天數差的計算方法是一樣的),最後得出結果。
思路……(歡迎留言討論) 方案三解決步驟: 首先要能夠判斷出對應的年份是否是閏年(閏年是364天,否則為365天) 而後要能夠求出對於任意所給日期,找出它和自己對應年份一月一日的日期差。 最後求得三個差值,計算出真正的日期差。 下面是用C語言簡單的實現的一個處理: 技術分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5 
 6 int tianxia[2][12]={
 7     {31,28,31,30,31,30,31,31
,30,31,30,31}, 8 {31,29,31,30,31,30,31,31,30,31,30,31} 9 }; 10 11 int isPrime(int year){ 12 if(year%4==0&&year%100!=0 || year%400==0) 13 return 1; 14 else 15 return 0; 16 } 17 18 int main() 19 { 20 int a,b; 21 scanf("%d%d",&a,&b); 22 if(a<b) 23 a^=b;b^=a;a^=b;
24 ///經過上邊的操作後,日期a將大於日期b 25 int yeara=a/10000; 26 int moutha=(a%10000)/100; 27 int daya=(a%100); 28 29 int yearb=b/10000; 30 int mouthb=(b%10000)/100; 31 int dayb=(b%100); 32 33 int day1,day2,day3; 34 day1=day2=day3=0; 35 36 for(int i=0;i<moutha-1;i++){ 37 printf("%d : %d\n",i+1,tianxia[isPrime(yeara)][i]); 38 day1+=tianxia[isPrime(yeara)][i]; 39 } 40 day1+=daya-1; 41 42 for(int i=0;i<mouthb-1;i++){ 43 printf("%d : %d\n",i+1,tianxia[isPrime(yearb)][i]); 44 day2+=tianxia[isPrime(yearb)][i]; 45 } 46 day2+=dayb-1; 47 48 for(int i=yearb;i<yeara;i++){ 49 if(isPrime(i)==0)day3+=365; 50 else day3+=366; 51 } 52 int ans = day3+day1-day2; 53 printf("The ans is :%d %d %d %d",ans,day1,day2,day3); 54 return 0; 55 }
簡單解決代碼

如何計算兩個(年-月-日)中間的間隔天數