从c#今天开始查找下一个闰年

AMe*_*Meh 1 c#

我想从今天的日期开始寻找下一个闰年.

例如,

Date        NextLeapDate
-----       ------------
2016-01-01   2016-02-29
2016-05-24   2020-02-29
2017-02-03   2020-02-29
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止获得下一个闰年的原因,但它让我错了价值,

public int GetNextLeapYear(int year)
{
    bool isLeapYear = false;

    while (true)
    {
        if (DateTime.IsLeapYear(year))
        {
            isLeapYear = true;
        }
        else
        {
            year = year + 1;
            GetNextLeapYear(year);
        }
        break;
    }
    return year;
}
Run Code Online (Sandbox Code Playgroud)

pok*_*oke 5

像这样的东西:

DateTime GetNextLeapDate (DateTime baseDate)
{
    int year = baseDate.Year;

    // start in the next year if we’re already in March
    if (baseDate.Month > 2)
        year++;

    // find next leap year
    while (!DateTime.IsLeapYear(year))
        year++;

    // get last of February
    return new DateTime(year, 2, 29);
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果(并且仅当)基准日期已经超过3月(即可能的闰日已经结束),我们需要跳过检查当前年份.这样,我们就不会得到2016年2月29日的结果,例如今天(这篇文章的时间).

像这样使用它返回所需的日期:

Console.WriteLine(GetNextLeapDate(new DateTime(2016, 01, 01))); // 2016-02-29
Console.WriteLine(GetNextLeapDate(new DateTime(2016, 05, 24))); // 2020-02-29
Console.WriteLine(GetNextLeapDate(new DateTime(2017, 02, 03))); // 2020-02-29
Run Code Online (Sandbox Code Playgroud)