Вот и проблема. Я видел много решений, но ни один не кажется, отвечают критериям, которые я хочу ...Как вы рассчитываете возраст в C#, используя дату рождения (учитывая високосные годы)
Я хочу, чтобы отобразить возраст в этом формате
20 y(s) 2 m(s) 20 d(s)
20 y(s) 2 m(s)
2 m(s) 20 d(s)
20 d(s)
и т.д ...
У меня есть попробовал несколько решений, но високосный год вызывает у меня проблему. Мои юнит-тесты всегда терпят неудачу из-за високосных лет и независимо от того, сколько дней проходит между ними, прыжок да зачисляется на дополнительное количество дней.
Вот мой код ....
public static string AgeDiscription(DateTime dateOfBirth)
{
var today = DateTime.Now;
var days = GetNumberofDaysUptoNow(dateOfBirth);
var months = 0;
var years = 0;
if (days > 365)
{
years = today.Year - dateOfBirth.Year;
days = days % 365;
}
if (days > DateTime.DaysInMonth(today.Year, today.Month))
{
months = Math.Abs(today.Month - dateOfBirth.Month);
for (int i = 0; i < months; i++)
{
days -= DateTime.DaysInMonth(today.Year, today.AddMonths(0 - i).Month);
}
}
var ageDescription = new StringBuilder("");
if (years != 0)
ageDescription = ageDescription.Append(years + " y(s) ");
if (months != 0)
ageDescription = ageDescription.Append(months + " m(s) ");
if (days != 0)
ageDescription = ageDescription.Append(days + " d(s) ");
return ageDescription.ToString();
}
public static int GetNumberofDaysUptoNow(DateTime dateOfBirth)
{
var today = DateTime.Now;
var timeSpan = today - dateOfBirth;
var nDays = timeSpan.Days;
return nDays;
}
Любые идеи ???
UPDATE:
Я хочу, чтобы разница между этими двумя датами, как:
var dateOfBirth = DateTime.Now.AddYears(-20);
string expected = "20 y(s) ";
string actual; // returns 20 y(s) 5 d(s)
actual = Globals.AgeDiscription(dateOfBirth);
Assert.AreEqual(expected, actual);
возможно дубликат [Как рассчитать кого-то возраста в C#?] (Http://stackoverflow.com/questions/9/how-do-i-calculate-someones-age-in-c) – Magnus
Это было задано слишком много раз, вы не нашли ни одного из них полезным? – V4Vendetta
@ V4Vendetta, к сожалению, об этом никогда не спрашивали. Я имею в виду, проблема в другом, позвольте мне обновить мое описание ... –