2012-02-08 2 views
-2

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

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

+1

Почему вы делаете что-то труднее для себя, чем вам нужно? TextBox вместо DateTimePicker усложняет работу. Хранение дат как varchar вместо даты или даты и времени делает вещи более трудными.Вам нужно принять проектные решения, которые лучше соответствуют вашим потребностям. –

+0

Согласовано с atornblad, и даже если вы не можете использовать DateTimePicker, убедитесь, что вы разбираете строку как можно раньше, так что вы не получаете различные форматы в своем db. –

+0

Возможный дубликат [Как рассчитать возраст человека в C#?] (Http://stackoverflow.com/questions/9/how-do-i-calculate-someones-age-in-c) – V4Vendetta

ответ

0

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

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

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

-2

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

2

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

Начните с 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. 
-2

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

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

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

string dif = (now-dob) .ToString();

string age = "0";

, если (dif.Length> 4)

возраст = dif.Substring (0, dif.Length - 4);

txt_age.Text = age.ToString();