[英]Find next leap year from today's date in c#
我想找到從今天起的下一個leap年。
例如
Date NextLeapDate
----- ------------
2016-01-01 2016-02-29
2016-05-24 2020-02-29
2017-02-03 2020-02-29
到目前為止,這是我獲得下一個leap年的能力,但是卻給我帶來了錯誤的價值,
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;
}
像這樣:
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);
}
請注意,如果(且僅當)基准日期已經早於3月(即可能的leap日已經結束),我們需要跳過檢查當前年份。 那樣的話,我們不會在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
您當前的代碼只是程序的一部分? 下面的代碼是從問題中復制的,並通過我的建議編輯(以及其他簡化方法)進行了更改,以使其正常工作。
public int GetNextLeapYear(int year)
{
if (DateTime.IsLeapYear(year))
{
return year;
}
else
{
year = year + 1;
return GetNextLeapYear(year);
}
}
您不需要遞歸。 嘗試這個:
public int GetNextLeapYear(int year)
{
while (true)
{
if (DateTime.IsLeapYear(year))
{
return year;
}
year = year + 1;
}
}
要使用遞歸來查找下一個leap年,您可以像這樣更改方法。
public int GetNextLeapYear(int year)
{
if (!DateTime.IsLeapYear(year))
{
return GetNextLeapYear(year + 1);
}
return year;
}
使用遞歸,您不需要While循環,只需要檢查是否需要繼續或返回值即可。 這也使您可以擺脫不需要的變量。 @poke答案會更完整地計算您所處的實際月份等。 我只回答了這種方法,以像您一樣繼續使用遞歸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.