rendered paste body#include <stdio.h>
#include <windows.h>
#include <time.h>
bool GetDateParts(char *szDate, int *lpnDateParts);
int DaysSinceYearStart(int nMonth, int nYear);
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
int nYearStart2 = lpnDateStart[2] - nModYear;
int nYearEnd2 = lpnDateEnd[2] - nModYear;
// transform both dates into a numeric timestamp
dblstart = (double)nYearStart2 * 7464960000.0000;
dblstart += (double)DaysSinceYearStart(lpnDateStart[1], lpnDateStart[2]) * 86400.0000;
dblstart += (double)lpnDateStart[0] * 86400.0000;
dblend = (double)nYearEnd2 * 7464960000.0000;
dblend += (double)DaysSinceYearStart(lpnDateEnd[1], lpnDateEnd[2]) * 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 nYear)
{
int nDays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nCnt = 0;
// account for leap year
if (nYear % 4 == 0)
nDays[1]++;
// 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;
}