Вы хотите рассчитать возраст в годах для сотрудника? Затем вы можете использовать этот фрагмент (из Вычислить возраст в C # ):
DateTime now = DateTime.Today;
int age = now.Year - bday.Year;
if (bday > now.AddYears(-age)) age--;
Если нет, то укажите. Мне трудно понять, чего вы хотите.
Math.Round (DateTime.Now.Subtract (DOB) .TotalDays / 365.0)
Как уже указывалось, это не сработает. Вам нужно будет сделать следующее:
(Int32)Math.Round((span.TotalDays - (span.TotalDays % 365.0)) / 365.0);
и на этом этапе другое решение будет менее сложным и будет оставаться точным на больших промежутках.
Редактировать 2, как насчет:
Math.Floor(DateTime.Now.Subtract(DOB).TotalDays/365.0)
Господи, я плохо разбираюсь в основах математики в наши дни ...
На этом сайте есть:
public static int CalculateAge(DateTime BirthDate)
{
int YearsPassed = DateTime.Now.Year - BirthDate.Year;
// Are we before the birth date this year? If so subtract one year from the mix
if (DateTime.Now.Month < BirthDate.Month || (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day))
{
YearsPassed--;
}
return YearsPassed;
}
Вычитание двух DateTime
дает вам TimeSpan
назад. К сожалению, самая большая единица, которую он вам возвращает, - это дни.
Хотя это и неточно, вы можете оценить это, например:
int days = (DateTime.Today - DOB).Days;
//assume 365.25 days per year
decimal years = days / 365.25m;
Редактировать: Упс, TotalDays - это двойное, Days - это int.
private static Int32 CalculateAge(DateTime DOB)
{
DateTime temp = DOB;
Int32 age = 0;
while ((temp = temp.AddYears(1)) < DateTime.Now)
age++;
return age;
}
(DateTime.Now - DOB).TotalDays/365
Вычитание структуры DateTime из другой структуры DateTime даст вам структуру TimeSpan со свойством TotalDays ... затем просто разделите на 365