【问题标题】:C - mktime() returns -1 where it shouldn'tC - mktime() 在不应该的地方返回 -1
【发布时间】:2019-12-20 17:55:24
【问题描述】:

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

此外,将time_t 更改为size_t 使其可以与mktime(now) 一起使用,但不能与mktime(parsedDate) 一起使用

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

我在 Windows 10 上使用 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;
}

【问题讨论】:

  • nowparsedTime 都指向同一个结构。
  • 但是,我不确定为什么这会导致mktime() 返回-1。它应该只会让您计算出0 的差异。
  • daysDifference / (60 * 60 * 24) 是一个int,但您使用%lf 格式打印它,即long double
  • date 变量有什么用?你永远不会使用它。您传递给函数的dateStr 的值是多少?
  • 可能不是你的直接错误,而是parsedTime->tm_year = year - 1900; /* not 1990 */

标签: c date datetime mktime


【解决方案1】:

可能不是您的直接错误,而是

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

【讨论】:

    猜你喜欢
    • 2015-10-02
    • 1970-01-01
    • 2023-03-27
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2016-10-09
    相关资源
    最近更新 更多