計算兩個日期之間的時間差 效率優化

2021-10-01 10:32:50 字數 1458 閱讀 5326

原問題計算兩個日期之間的時間差(c++),日期以8位整數給出,前四位表示年,之後兩位表示月,最後兩位表示日。

**質量和效能分析

**尚不完善,未考慮異常輸入處理,魯棒性差,但正確性基本保證。

演算法效率分析

較普通**,採用時間複雜度較低的演算法,但同時提公升了空間複雜度,因為開闢了額外的儲存空間存放每個月的日期。

對於年時間複雜度約為o(n);對於月時間複雜度為o(1),因為最多迴圈12次;對於日時間複雜度為o(1)。無巢狀迴圈的存在,故最終時間複雜度為o(n)。

但是,演算法在較好的輸入情況下時間複雜度無明顯改善,不能充分利用輸入特性

**

#includeusing namespace std;

// 將每個月的日期數儲存起來,其中2月取27

const int monthdate[13]=

;// 將輸入的8位整數轉換為 年-月-日 的形式

void trans(int date, int transdate)

// 計算兩個日期由於年份不同產生的日期差別

int years(int year1, int month1, int year2, int month2)

}return date;

}// 計算兩個日期由於月份不同產生的日期差別

int month(int month1, int month2, int year2)

return date;

}// 計算兩個日期由於日期不同產生的日期差別,這裡直接減就好

int day(int day1, int day2)

int main()

for(int i=0; i<8;i++)

/* input dates */

// 資料型別轉換

int transdate1[3],transdate2[3]year1,month1,day1,year2,month2,day2;

/* date transform */

trans(earlydate,transdate1);

year1 = transdate1[0];

month1 = transdate1[1];

day1 = transdate1[2];

trans(latedate,transdate2);

year2 = transdate2[0];

month2 = transdate2[1];

day2 = transdate2[2];

/* date transform */

// 計算時間,這裡用的是c中面向過程的思想,故能單獨寫函式的單獨寫

int date = years(year1, month1, year2, month2) + month(month1, month2, year2) + day(day1, day2);

cout

}

兩個日期之間的時間差計算DateDiff

sql server date 函式 datediff 函式返回兩個日期之間的天數。datediff datepart,startdate,enddate startdate 和 enddate 引數是合法的日期表示式。datepart 引數可以是下列的值 datepart縮寫年 yy,yyyy 季...

計算兩個時間戳之間的時間差

功能 計算兩個時間戳之間相差的日時分秒 begin time 開始時間戳 end time 結束時間戳 function timediff begin time,end time else 計算天數 timediff endtime starttime days intval timediff 86...

Java 計算兩個日期的時間差

計算兩個日期的時間差 param formattime1 param formattime2 return public static string gettimedifference timestamp formattime1,timestamp formattime2 catch parseex...