两个日期C ++之间有多少天

时间:2016-03-16 20:09:53

标签: c++ date date-arithmetic

我有一个程序,它使用我在类中定义的两个函数。我的班级工作正常,但我的程序总是返回一些休息天数。当日期相隔较远时,会出现更多错误。我的代码设计为在一个函数中计算自1582年以来的总天数,另一个函数从较小的函数中减去较高的数量。我从哪里得到错误?我知道它可能不是最有效的做事方式(cpu明智),但有人能找到我的逻辑搞砸的地方吗?这也是闰年的原因。我一直在针对网站http://www.timeanddate.com/date/durationresult.html

查看我的计划
int Date::totalDays()
{
    int totalDays = 0;
    int daysInMonth[]={0,31,28,31,30,31,30,31,31,31,31,30,31};
    totalDays += day;
    for (int i = month-1; i > 0; i--)
    {
        totalDays += daysInMonth[i];
    }
    for (int i = year-1; i > 1582; i--)
    {
        if(year % 100 == 0)
        {
            if(year % 400 == 0)
                totalDays += 366;
            else
                totalDays += 365;
        }
        else
        {
            if(year % 4 == 0)
                totalDays += 366;
            else
                totalDays += 365;
        }
    }
    return totalDays;
}

int Date::daysBetween(Date other)
{
    if (this->totalDays() > other.totalDays())
        return this->totalDays() - other.totalDays();
    else
        return other.totalDays() - this->totalDays();
}

谢谢。

1 个答案:

答案 0 :(得分:4)

问题1:

int daysInMonth[]={0,31,28,31,30,31,30,31,31,31,31,30,31};

应该是

int daysInMonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//                                           ^^

问题2:

如果当前year是闰年,并且month大于2,那么您还需要在当年2月29日的帐户中添加一天。