给定字符串输入,如何计算C#中的年龄?

时间:2012-02-08 08:46:26

标签: c# winforms datetimepicker

我想计算一个人的现在年龄。使用TextBox输入出生日期(DOB)数据,我的数据库将DOB存储为varchar。

如何找到这个出生日期的当前年龄?

4 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

如果日期始终采用相同的格式,您可以使用DateTime.TryParseExact() - 但这似乎不是这种情况。

也许这个图书馆对你有帮助,作者有同样的问题: http://www.codeproject.com/Articles/33298/C-Date-Time-Parser

虽然可以解析每种格式,但无法保证。

答案 2 :(得分:-2)

您可以转换DOB string into DateTime object,然后可以计算年龄:)

答案 3 :(得分:-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”;

if(dif.Length> 4)

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

txt_age.Text = age.ToString();