在C中使用difftime()

时间:2017-11-17 05:20:45

标签: c visual-c++

我正在使用difftime()尝试减去两个日期。但是考虑一下,就像在这个例子中,我得到的结果不正确。这是代码:

#include  <stdio.h>
#include  <time.h>
#include  <stdlib.h>
#include  <string.h>

const struct tm* stringToDate(const char *iDateStr)
{
    struct tm *tm = (struct tm*)malloc(sizeof(struct tm));
    memset(tm, 0, sizeof(struct tm));
    sscanf_s(iDateStr, "%d-%d-%d", &tm->tm_mday, &tm->tm_mon, &tm->tm_year);
    tm->tm_year -= 1900;

    return tm;
}

const int stringDateDiffDays(const char *isDateTime1, const char *isDateTime2)
{
    const struct tm *d1 = stringToDate(isDateTime1);
    const struct tm *d2 = stringToDate(isDateTime2);

    int diff = 0;
    double diffSecs = 0;

    // Seconds since start of epoch
    diffSecs = difftime(mktime((struct tm*)d1), mktime((struct tm*)d2));

    free((void *)d1);
    free((void *)d2);

    diff = (int)(diffSecs/(3600*24));

    return diff;
}

int main(void)
{
    char date1[] = "16-11-2017";
    char date2[] = "16-12-2017";

    printf("Date 1: %10s\n", date1);
    printf("Date 2: %10s\n", date2);
    printf("\nDifference : %d", stringDateDiffDays(date2, date1));

    return 0;
}

发生了什么事? stringToDate()是否对此负责,因为memset()可能?我正在使用Visual Studio 2012来编译此代码。我怎样才能正确实现这些功能?

0 个答案:

没有答案