I'm trying to write a function that finds the difference in days between the current date and the date given in a formated string (like dd.mm.yy H:M:S
), but mktime returns -1 every single time. Tried initializing both time structs with zeros, but that didn't help.
And also, changing time_t
to size_t
makes it work with mktime(now)
, but not with mktime(parsedDate)
I'm really confused by this, what am I doing wrong?
I'm using MSVC2019 (v142) on Windows 10.
int findDifferenceInDays(char* dateStr)
{
// Date/time format example:
// 12.09.2018 13:44:30
char date[] = "12.09.2018 13:44:30";
struct tm *now, *parsedTime;
time_t t_now = time(0);
now = localtime(&t_now);
time_t temp_time = time(&temp_time);
parsedTime = localtime(&temp_time);
int day, month, year, hour, minutes, seconds;
sscanf(dateStr, "%d.%d.%d %d:%d:%d",
&day, &month, &year, &hour, &minutes, &seconds);
parsedTime->tm_year = year - 1990;
parsedTime->tm_mon = month - 1;
parsedTime->tm_mday = day;
parsedTime->tm_hour = hour;
parsedTime->tm_min = minutes;
parsedTime->tm_sec = seconds;
time_t endTime, begTime;
endTime = mktime(now);
begTime = mktime(parsedTime);
double diffInSeconds = difftime(endTime, begTime);
int daysDifference = difftime(endTime, begTime) / (60*60*24);
printf("Days between %s and now: %lf\n", dateStr, daysDifference / (60 * 60 * 24));
return daysDifference;
}
Probably not your immediate error, but
parsedTime->tm_year = year - 1900; /* not 1990 */