от
Дали
DateTime
представляющий человека день рождения, как мне рассчитать свой возраст в годах?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста подтвердите адрес электронной почты.

31 Ответы

0 голосов
от
Дали
DateTime
представляющий человека день рождения, как мне рассчитать свой возраст в годах?
0 голосов
от
Легкое для понимания и простое решение.
// Save today's date.
var today = DateTime.Today;
// Calculate the age.
var age = today.Year 

Однако, это предполагает, что вы ищете западной идеи возраста, а не с помощью Восточной Азии расплаты.
0 голосов
от
Это странный способ сделать это, но если вы форматируете дату
yyyymmdd
и вычитает дату рождения из текущей даты, то падение последние 4 цифры у тебя возраст :) Я не знаю C#, но я считаю, что это будет работать на любом языке.
20080814 

Падение последние 4 цифры = 28
. C# Код:
int now = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
int dob = int.Parse(dateOfBirth.ToString("yyyyMMdd"));
int age = (now 

Или же не все преобразования типов в виде метода расширения. Проверка ошибок опущена:

public static Int32 GetAge(this DateTime dateOfBirth)
{
    var today = DateTime.Today;

    var a = (today.Year * 100   today.Month) * 100   today.Day;
    var b = (dateOfBirth.Year * 100   dateOfBirth.Month) * 100   dateOfBirth.Day;

    return (a
0 голосов
от
Я не знаю, как неправильное решение может быть принято. Правильный фрагмент C# - кода была написана Майклом Стум Вот фрагмент теста:
DateTime bDay = new DateTime(2000, 2, 29);
DateTime now = new DateTime(2009, 2, 28);
MessageBox.Show(string.Format("Test {0} {1} {2}",
                CalculateAgeWrong1(bDay, now),      // outputs 9
                CalculateAgeWrong2(bDay, now),      // outputs 9
                CalculateAgeCorrect(bDay, now),     // outputs 8
                CalculateAgeCorrect2(bDay, now)));  // outputs 8
Здесь у вас есть методы:
public int CalculateAgeWrong1(DateTime birthDate, DateTime now)
{
    return new DateTime(now.Subtract(birthDate).Ticks).Year
0 голосов
от
Я не думаю, что любой из ответов до сих пор предоставить для культур, которые вычисляют возраст по-разному. См., например, Восточной Азии возраст расплаты и на Западе. Любой реальный ответ должен включать локализации. Шаблон стратегии, вероятно, будет в порядке в этом примере.
0 голосов
от
Простой ответ на это применить
AddYears
как показано ниже, потому что это единственный родной способ, чтобы добавить лет по 29 февраля. високосных лет и получить правильный результат 28-го февраля. для обычных лет. Некоторые считают, что с 1 марта. день рождения leaplings, но ни .Чистая, ни каких-либо официальных правил поддерживает в этом, ни здравой логике объяснить, почему некоторые рождаются в феврале должны иметь 75% их дни рождения в один месяц. Кроме того, метод возраст поддается быть добавлены в качестве дополнения к
DateTime
. При этом вы можете получить возраст в простейшем виде: Элемент списка инт возраста = дата рождения.Возраст();
public static class DateTimeExtensions
{
    ///
0 голосов
от
Мое предложение
int age = (int) ((DateTime.Now 

Что, кажется, год меняется на правильную дату. (Я месте протестировано до возраста 107)
0 голосов
от
Еще одна функция, не мной, а найден в интернете и немного усовершенствовал его:
public static int GetAge(DateTime birthDate)
{
    DateTime n = DateTime.Now; // To avoid a race condition around midnight
    int age = n.Year 

Только две вещи, которые приходят мне в голову: а как насчет людей из стран, которые не используют григорианский календарь? Датавремя.Сейчас на сервере-специфическую культуру, я думаю. У меня абсолютно 0 знаний о реально работающих с азиатскими календари и я не знаю, если есть простой способ для преобразования дат между календарями, но только в том случае, если вы хотели бы знать о тех, китайцев от 4660 год :-)
0 голосов
от
2 основные проблемы для решения: 1. Рассчитайте точный возраст - в годах, месяцах, днях и т. д. 2. Расчета, как правило, воспринимается возрасту люди, как правило, не волнует, сколько лет у них точно есть, они просто заботятся, когда их день рождения в текущем году. Решение для 1 очевиден:
DateTime birth = DateTime.Parse("1.1.2000");
DateTime today = DateTime.Today;     //we usually don't care about birth time
TimeSpan age = today 



Решение для 2-та, которую не так точны в определении общий возраст, но воспринимается как точные люди. Люди часто используют его, когда они вычисляют их возраст "вручную":

DateTime birth = DateTime.Parse("1.1.2000");
DateTime today = DateTime.Today;
int age = today.Year 

Примечания к 2.:


Это моя предпочтительным решением
Мы не можем использовать тип datetime.Функции dayofyear или моменты времени, как они перекладывают количество дней в високосные годы
У меня мало поставить там несколько строк для удобства чтения


Просто еще одно замечание ... я бы создал 2 статических перегруженных методов для него, один для универсального использования, второй для использования удобство:

public static int GetAge(DateTime bithDay, DateTime today) 
{ 
  //chosen solution method body
}

public static int GetAge(DateTime birthDay) 
{ 
  return GetAge(birthDay, DateTime.Now);
}
0 голосов
от
Я опоздал на вечеринку, но вот один-лайнер:
int age = new DateTime(DateTime.Now.Subtract(birthday).Ticks).Year
...