计算两个日期之间的天数

时间:2019-09-16 20:39:58

标签: c

我做了一个程序,计算两个日期之间的不同日期,但是我不确定如何添加一条确保程序不包括结束日期的语句。

然后,如果我在写完两个日期之后写了include一词,那么只会包含结束日期!例如,程序将说以下./daysCalulcatorA dd1 mm2 yyyy1 dd2 mm2 yyyy2,结束日期(dd2 mm2 yyyy2将不包括在内,直到我这样写“ incude”一词: ./daysCalulcatorA dd1 mm2 yyyy1 dd2 mm2 yyyy2 incude

例如:

/daysCalulcatorA 19 2 2019 22 4 2019 include 

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用<string.h>中的strcmp来检查argv [7]是否为“ include”,并设置一个变量以忽略结束日期

    /* Rest of the code above */

    if (mm2<mm1) {
        mm2 += 12;
        yyyy2 -= 1;
    }

    int include = 0;
    if (argc >= 8)
    {
        if (strcmp("include", argv[7]) == 0)
        {   
            include = 1;
        }
    }

    day_diff = dd2 - dd1;
    if (include == 0)
    {
        day_diff--;
    }
    printf("%d", day_diff);

    return 0;

但是我建议您搜索getopts,标志似乎对用户更友好
./daysCalculatorA -i 19 2 2019 22 4 2019

答案 1 :(得分:0)

  

我的代码计算的是月和日,但仅计算打印日,即86天或2个月零25天!我该如何编辑使其显示86?

这是“不要(尝试)重新发明轮子”的典型情况。使用标准C mktime函数可将细分时间转换为可以相互减去的时间值。

#include <time.h>
…
  time_t t1, t2;
  t1 = mktime(&(struct tm){ .tm_mday=dd1, .tm_mon=mm1-1, .tm_year=yyyy1-1900 });
  t2 = mktime(&(struct tm){ .tm_mday=dd2, .tm_mon=mm2-1, .tm_year=yyyy2-1900 });
  day_diff = (t2 - t1) / 24 / 60 / 60 + include;    // make days from seconds