Я хочу рассчитать нынешний возраст человека. Данные о дате рождения (DOB) вводятся с использованием TextBox
, и моя база данных хранит DOB как varchar.Учитывая ввод строки, как вычислить возраст в C#?
Как найти текущий возраст с этой даты рождения?
Я хочу рассчитать нынешний возраст человека. Данные о дате рождения (DOB) вводятся с использованием TextBox
, и моя база данных хранит DOB как varchar.Учитывая ввод строки, как вычислить возраст в C#?
Как найти текущий возраст с этой даты рождения?
Если дата всегда в том же формате, вы можете использовать DateTime.TryParseExact()
- однако, похоже, это не так.
Возможно, эта библиотека помогает вам, автор имел такую же проблему: http://www.codeproject.com/Articles/33298/C-Date-Time-Parser
Это не способ гарантировать, что каждый хотя формат может быть проанализирован.
Вы можете конвертировать DOB string into DateTime object
, а затем можно вычислить возраст :)
Есть много вещей, которые вы должны сделать здесь. Прежде всего вам нужен способ проанализировать дату, хранящуюся в базе данных, изначально введенную пользователем вручную. Это трудная задача, потому что пользователи, как правило, печатают практически все.
Начните с 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.
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();
Почему вы делаете что-то труднее для себя, чем вам нужно? TextBox вместо DateTimePicker усложняет работу. Хранение дат как varchar вместо даты или даты и времени делает вещи более трудными.Вам нужно принять проектные решения, которые лучше соответствуют вашим потребностям. –
Согласовано с atornblad, и даже если вы не можете использовать DateTimePicker, убедитесь, что вы разбираете строку как можно раньше, так что вы не получаете различные форматы в своем db. –
Возможный дубликат [Как рассчитать возраст человека в C#?] (Http://stackoverflow.com/questions/9/how-do-i-calculate-someones-age-in-c) – V4Vendetta