我有一个出生日期。我想计算一个人的生日在该人出生的那一周的同一天的次数。所以,如果他出生在星期五,那么我想算一下到星期五为止生日多少。
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;
}
答案 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))