如何计算从0000年1月1日到包括闰年在内的任何指定日期的天数?

时间:2015-02-25 23:15:15

标签: c++

我有一个C ++项目,其最终目标是为任何月份和年份创建日历。项目的一部分要求我首先计算从0000年1月1日到任何指定日期的天数。该函数必须使用三个参数,表示年,月和日。我是C ++的新手,所以如果有一些错误使用的命令或逻辑,请给我一些懈怠。到目前为止,这就是我所拥有的,但是当我测试它时,数字已经过了几天。有人可以告诉我我的代码出错了吗?

int const day_of_forever(int const year, int const month, int const day)
 {
     int count[]={0,31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
     if ((year % 400==0) && (year % 100 != 0) && (year % 4 == 0 )&& (month>=2))
         ((count[month-1]+day)+1);
     return (count[month-1]+day)+(((year)*365)+1) +((year)/4)-(year/100)+(year/400);
 }

void main()
{ 
    int const year=2000;
    int const day=1;
    int const month=1;

    int const something=day_of_forever(year,month,day);
    print (something);
}

2 个答案:

答案 0 :(得分:5)

您的问题陈述定义不明确。你不能只说'#34;任何指定的日期"因为许多日期是不明确的,因为在不同时间在不同地方使用的各种日历。也许你应该坚持1800年后的日期,以保持可管理性。

无论如何,如果您正在尝试实施proleptic Gregorian calendar

  1. 您不会考虑Calendar Act of 1752

  2. 您的if声明没有做任何事情,它只是将某事物加1并将其扔掉。

  3. 闰年测试中的逻辑是错误的。它说闰年必须是零模400和其他一些东西。但是大多数leap years不是零mod 400。

  4. + - +声明末尾的return逻辑并未考虑日期是在闰日之前还是之后。

  5. 您不会考虑朱利安leap days not in the proleptic格里高利历。您可能需要也可能不需要,具体取决于您的输入日期的定义方式。

  6. 没有零年。所以1月1日0000从未发生过。

答案 1 :(得分:1)

您的闰年测试应该类似

if( (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) && month >= 2)

分享并享受。