确定日期的C ++函数

时间:2013-08-20 16:59:54

标签: c++ function loops

我正在尝试编写一个计算租金账单的程序。我已经编写了大部分程序,但是我必须编写一个函数,该函数将用户输入的租用天数和起始租赁日期确定为返回日期。唯一的要求是该函数是一个调用另一个函数的循环(确定该月的天数)。我一直遇到的问题是,另一个功能(确定每个月的天数)不会根据月份而改变。因此,如果我放入2013年1月1日,它具有正确的月份天数,然后当计数器更改为2月时,它将持续31天。有没有人知道满足要求的公式?

3 个答案:

答案 0 :(得分:3)

从硬编码数组开始,每个月的天数。 补偿2月的闰日,你应该很好。

int daysInMonth(int month, int year)
{
    // Check for leap year
    bool isLeapYear;
    if (year % 400 == 0)
        isLeapYear = true;
    else if (year % 4 == 0 && year % 100 != 0)
        isLeapYear = true;
    else
        isLeapYear = false;

    int numDaysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    if (isLeapYear)
        numDaysInMonth[1]++;
    return numDaysInMonth[month - 1];
}

答案 1 :(得分:2)

为什么不考虑使用Boost.Date_Time

答案 2 :(得分:0)

int isLeap(int year)
{ 
    return (year > 0) && !(year % 4) && ((year % 100) || !(year % 400));
}

int calcDays(int month, int year)
{
    static const int daysInMonth[2][13] = {
        { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
        { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };

    if (month >= 1 && month <= 12) {
        return daysInMonth[isLeap(year)][month - 1];
    }
    return -1;
}

这会给你一个月的日子