С учетом ввода строки, как рассчитать возраст в C #? - PullRequest
0 голосов
/ 08 февраля 2012

Я хочу рассчитать текущий возраст человека.Данные о дате рождения (DOB) вводятся с помощью TextBox, и моя база данных хранит DOB в виде varchar.

Как узнать текущий возраст с этой даты рождения?

Ответы [ 4 ]

2 голосов
/ 08 февраля 2012

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

Начните с DateTime.Parse(), разберитесь со всеми ошибками, которые вы получите, и да, вы получите ошибки. Откуда, например, вы знаете, что означает "09/10/11" ? Это американское или британское свидание?

Одной из возможностей является переключение с TextBox на некоторую форму MaskedTextBox, чтобы заставить пользователя всегда вводить дату в одном и том же формате и правильно сохранять дату в качестве истинной даты в базе данных.

После того, как у вас есть правильное значение DateTime, вы можете использовать простое вычитание, чтобы получить возраст человека, но возвращаемое вами значение TimeSpan не совсем полезно, так как я предполагаю, что вам нужно вывести возраст человека в полные годы.

// Assuming dateOfBirth is a DateTime value
TimeSpan age = DateTime.Today - dateOfBirth;

Переменная age здесь содержит количество времени, прошедшее с даты рождения до сегодняшнего дня. Учитывая тот факт, что годы различаются по длине, это не лучший вариант. Я бы сделал что-то вроде этого:

DateTime today = DateTime.Today;
int years = today.Year - dateOfBirth.Year;
if (dateOfBirth.Month > today.Month) {
    --years;
}
else if (dateOfBirth.Month == today.Month && dateOfBirth.Day > today.Day) {
    --years;
}
// TODO: Output the years variable.
0 голосов
/ 08 марта 2012

DateTime dateDOB = DateTime.Parse (txt_dob.Text);

int now = int.Parse (DateTime.Today.ToString ("yyyyMMdd"));

int dob ​​= int.Parse (dateDOB.ToString ("yyyyMMdd"));

string dif = (сейчас - dob) .ToString ();

string age = "0";

if (dif.Length> 4)

age = dif.Substring (0, dif.Length - 4);

txt_age.Text = age.ToString ();

0 голосов
/ 08 февраля 2012

Вы можете конвертировать DOB string into DateTime object, а затем можете рассчитать возраст:)

0 голосов
/ 08 февраля 2012

Если дата всегда в одном и том же формате, вы можете использовать DateTime.TryParseExact() - однако здесь это не так.

Возможно, эта библиотека поможет вам, у автора было то же самоепроблема: http://www.codeproject.com/Articles/33298/C-Date-Time-Parser

Это не гарантирует, что каждый формат может быть проанализирован.

...