这个人在一周的同一天有多少个生日

时间:2017-07-20 13:37:40

标签: c#

我有一个出生日期。我想计算一个人的生日在该人出生的那一周的同一天的次数。所以,如果他出生在星期五,那么我想算一下到星期五为止生日多少。

public static int HowManyBirthDaysInSameDayOfWeek(DateTime dateOfBirth)
{
    int counter = 0;
    for (DateTime d = dateOfBirth; d.Date <= DateTime.Today; d = d.AddYears(1))
    { 
         if (d.DayOfWeek == dateOfBirth.DayOfWeek)
         {
             counter++;
         }
     }

     return counter;
 }

3 个答案:

答案 0 :(得分:4)

问题是您在第一次迭代上也遇到了if statement,这是该人出生的那一天。因此,您的输出为+1而不是有意。

返回时从计数器中减去1,或从以后的年份开始:

public static int HowManyBirthDaysInSameDayOfWeek(DateTime dateOfBirth)
{
    int counter = 0;
    for (DateTime d = dateOfBirth.AddYears(1); d.Date <= DateTime.Today; d = d.AddYears(1))
    { 
         if (d.DayOfWeek == dateOfBirth.DayOfWeek)
         {
             counter++;
         }
     }    
     return counter;
 }

答案 1 :(得分:2)

以下代码适用于所有出生日期,包括2月29日。

public static int HowManyBirthDaysInSameDayOfWeek(DateTime dateOfBirth)
{
    int iteration = 1;
    int counter = 0;
    for (DateTime d = dateOfBirth.AddYears(1); d.Date <= DateTime.Today; d = dateOfBirth.AddYears(++iteration))
    {
        if (d.DayOfWeek == dateOfBirth.DayOfWeek)
        {
            counter++;
        }
    }

    return counter;
}

这里的关键是在出生日期后一年开始,并且总是相对于出生日期增加年数,而不是一次增加一年。否则2月29日无法正确计算。使用此代码,2月29日出生的人将于2月29日闰年生日,2月28日生日。

答案 2 :(得分:0)

for (DateTime d = dateOfBirth.AddYears(1); d.Date <= DateTime.Today; d = d.AddYears(1))