C-mktime()返回-1,其中不应返回';T

C-mktime()返回-1,其中不应返回';T,c,date,datetime,mktime,C,Date,Datetime,Mktime,我试图编写一个函数,查找当前日期与格式化字符串中给定日期之间的天数差异(如dd.mm.yy H:m:S),但mktime每次返回-1。尝试用零初始化两个时间结构,但没有帮助 而且,将time\u t更改为size\u t可以使它与mktime(现在)一起工作,但不能与mktime(parsedDate) 我真的很困惑,我做错了什么 我在Windows10上使用MSVC2019(v142) int findDifferenceInDays(char* dateStr) { // D

我试图编写一个函数,查找当前日期与格式化字符串中给定日期之间的天数差异(如
dd.mm.yy H:m:S
),但mktime每次返回-1。尝试用零初始化两个时间结构,但没有帮助

而且,将
time\u t
更改为
size\u t
可以使它与
mktime(现在)
一起工作,但不能与
mktime(parsedDate)

我真的很困惑,我做错了什么

我在Windows10上使用MSVC2019(v142)

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

可能不是你的直接错误,但是

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

now
parsedTime
都指向同一个结构。但是,我不确定为什么这会导致
mktime()
返回
-1
。它只会使您计算
0
的差值
daysDifference/(60*60*24)
是一个
int
,但您使用
%lf
格式打印它,该格式用于
长双精度
日期
变量用于什么?你从不使用它。传递给函数的
dateStr
的值是多少?可能不是直接的错误,而是
parsedTime->tm_year=year-1900;/*不是1990年*/