繁体   English   中英

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

[英]Given string input, how do I calculate age in C#?

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

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

在这里您需要做很多事情。 首先,您需要一种方法来解析存储在数据库中的日期,该日期最初是由用户手动输入的。 这是一项艰巨的任务,因为用户几乎可以输入任何内容。

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.TryParseExact() - 但是这里似乎并非如此。

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

尽管可以解析每种格式,但这并不能保证。

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

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();

字符串年龄=“0”;

如果(差异长度 > 4)

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

txt_age.Text = age.ToString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM