#include #include #include bool GetDateParts(char *szDate, int *lpnDateParts); int DaysSinceYearStart(int nMonth); void main(void) { char szTimeStart[] = "26-12-2007"; // dd-mm-yyyy char szTimeEnd[] = "26-12-2008"; int lpnDateStart[3]; // 0 day 1 mon 2 year int lpnDateEnd[3]; double dblstart, dblend; GetDateParts(szTimeStart, lpnDateStart); GetDateParts(szTimeEnd, lpnDateEnd); // sec in day = 86400 // sec in month = ndays * 86400 // sec in year = 365.25 * 86400 = 7464960000 int nModYear = lpnDateStart[2] > lpnDateEnd[2] ? lpnDateEnd[2] : lpnDateStart[2]; // normalize year so we don't have some huge amount of seconds lpnDateStart[2] -= nModYear; lpnDateEnd[2] -= nModYear; // transform both dates into a numeric timestamp dblstart = (double)lpnDateStart[2] * 7464960000.0000; dblstart += (double)DaysSinceYearStart(lpnDateStart[1]) * 86400.0000; dblstart += (double)lpnDateStart[0] * 86400.0000; dblend = (double)lpnDateEnd[2] * 7464960000.0000; dblend += (double)DaysSinceYearStart(lpnDateEnd[1]) * 86400.0000; dblend += (double)lpnDateEnd[0] * 86400.0000; // calc diff double dbldiff = dblend > dblstart ? dblend-dblstart : dblstart-dblend; printf("Diff between dates is %0.00f sec.\n", dbldiff); } int DaysSinceYearStart(int nMonth) { int nDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int nCnt = 0; // sum up days occured since start of year (not including curr month) for (int i = 0; i < (nMonth - 1); i++) nCnt += nDays[i]; return nCnt; } bool GetDateParts(char *szDate, int *lpnDateParts) { char *szToken = strtok(szDate, "-"); // seperate szTime by - if (szToken == NULL) return false; lpnDateParts[0] = atoi(szToken); // get day szToken = strtok(NULL, "-"); if (szToken == NULL) return false; lpnDateParts[1] = atoi(szToken); // get month szToken = strtok(NULL, "-"); if (szToken == NULL) return false; lpnDateParts[2] = atoi(szToken); // get day return true; }