Search code examples
cdatedatetimemktime

C - mktime() returns -1 where it shouldn't


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;
}

Solution

  • Probably not your immediate error, but

    parsedTime->tm_year = year - 1900; /* not 1990 */