具有日期功能的逻辑

时间:2014-10-18 10:48:52

标签: c date pointers

我的目标是将日期添加到日期并返回正确的日期。

我让用户输入一个日期(dd,mm,yyyy)以及他们希望将来(天)的天数。

你能帮助改善我的逻辑

吗?

我的结果输出是如果我输入日期,例如:2014年10月18日并添加100天我得到的日期是118/10/2014,这显然是不对的。

void dateafter(int *pd, int *pm, int *py, int *pdtm, int *pdty, int *days ){

while(*days >= 0){

    if(*days > *pdty){
        *py += 1;
        daymonthyear(*pm, *py,  *pdtm, *pdty);
        *days -= *pdty;
    }
    if(*days > *pdtm - *pd){
        *pm = *pm + 1;

        if(*pm > 12){
            *pm = 1;
            *py = *py + 1;
        }

        daymonthyear(*pm,*py,*pdtm,*pdty);
        *days -= *pdtm;
    }
    else{
        *pd += *days;
        break;
    }
}
}

pdtm指的是本月的天数,pdty指的是pdty daymonthyear计算每月和每年的天数。

由于

2 个答案:

答案 0 :(得分:0)

将日期转换为unix时间。见http://linux.die.net/man/3/strptime会这样做。

添加的秒数。 (一天= 24 * 60 * 60)秒。

使用strftime转换回来

答案 1 :(得分:0)

您的代码中存在一些逻辑错误,但它们不一定会影响您的示例。

if(*days > *pdty){
    *py += 1;
    daymonthyear(*pm, *py,  *pdtm, *pdty);
    *days -= *pdty;
}

这段代码适用于3月份以来的所有日期。在闰年的1月和2月,你跳过今年的闰日,但你的代码会跳过明年的闰日。 (你可以跳过今年余下的时间,就像几个月一样,但你需要知道一年中当天的指数。)

if(*days > *pdtm - *pd){
    *pm = *pm + 1;

    if(*pm > 12){
        *pm = 1;
        *py = *py + 1;
    }

    daymonthyear(*pm,*py,*pdtm,*pdty);
    *days -= *pdtm;
}

在这里,您将跳过本月余下的时间。进入此区块后,*pd应为1,但您只需更改月份。你也应该从日期中减去*pdtm - *pd,你应该在计算下个月的日子之前这样做。

也许您的while应该是if s而不是一个包装while

while (days > restof(year)) ...    // do year advancement stuff
while (days > restof(month)) ...   // do month advancement stuff
// advance days that are left

在您的示例中,第118天表示日期刚刚添加到日期的日期,即您在第一次传递中输入else子句。您传递给函数的pdtmpdty的值是多少? (而且,为什么他们必须通过?为什么不让他们在当地?)