Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中的文本框中计算从日期算起的年龄#_C#_Asp.net - Fatal编程技术网

C# 在C中的文本框中计算从日期算起的年龄#

C# 在C中的文本框中计算从日期算起的年龄#,c#,asp.net,C#,Asp.net,可能重复: 如何从文本框中以dd/MM/yyyy的格式输入数据,以年为单位计算年龄 e、 g 输入:txtDOB.Text 20/02/1989(字符串格式) 输出:txtAge.Text 23 如评论中所述,正确答案如下: 您只需将生日作为约会时间: DateTime bday = DateTime.ParseExact("20/02/1989", "dd/MM/yyyy", CultureInfo.InvariantCulture); static int AgeInYears(Date

可能重复:

如何从文本框中以
dd/MM/yyyy
的格式输入数据,以年为单位计算年龄

e、 g

输入:txtDOB.Text 20/02/1989(字符串格式)
输出:txtAge.Text 23


如评论中所述,正确答案如下:

您只需将生日作为约会时间:

DateTime bday = DateTime.ParseExact("20/02/1989", "dd/MM/yyyy", CultureInfo.InvariantCulture);
static int AgeInYears(DateTime birthday, DateTime today)
{
    return ((today.Year - birthday.Year) * 372 + (today.Month - birthday.Month) * 31 + (today.Day - birthday.Day)) / 372;
}

您可以使用
DateTime
()的
Substract
方法,然后使用
Days
属性来确定实际年龄:

DateTime now = DateTime.Now;
DateTime givenDate = DateTime.Parse(input);

int days = now.Subtract(givenDate).Days
int age = Math.Floor(days / 365.24219)
试试这个

string[] AgeVal=textbox.text.split('/');
string Year=AgeVal[2].tostring();
string CurrentYear= DateTime.Now.Date.Year.ToString();
int Age=Convert.ToInt16((Current))-Convert.ToInt16((Year));

减去这两个值,得到您的年龄。

将出生日期解析为日期时间后,以下内容将起作用:

DateTime bday = DateTime.ParseExact("20/02/1989", "dd/MM/yyyy", CultureInfo.InvariantCulture);
var date = DateTime.ParseExact("20/02/1989", "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
var age = (DateTime.Today.Year - date.Year);
Console.WriteLine(age);
static int AgeInYears(DateTime birthday, DateTime today)
{
    return ((today.Year - birthday.Year) * 372 + (today.Month - birthday.Month) * 31 + (today.Day - birthday.Day)) / 372;
}
按如下方式分析日期:

DateTime dob = DateTime.ParseExact("20/02/1989", "dd/MM/yyyy", CultureInfo.InvariantCulture);
和一个示例程序:

using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime dob = new DateTime(2010, 12, 30);
            DateTime today = DateTime.Now;

            int age = AgeInYears(dob, today);

            Console.WriteLine(age); // Prints "1"
        }

        static int AgeInYears(DateTime birthday, DateTime today)
        {
            return ((today.Year - birthday.Year) * 372 + (today.Month - birthday.Month) * 31 + (today.Day - birthday.Day)) / 372;
        }
    }
}

这个答案并不是最有效的,因为它使用了一个循环,但它也不依赖于使用365.25个幻数

返回从
datetime
到今天的完整年数的函数:

public static int CalcYears(DateTime fromDate)
    {
        int years = 0;
        DateTime toDate = DateTime.Now;
        while (toDate.AddYears(-1) >= fromDate)
        {
            years++;
            toDate = toDate.AddYears(-1);
        }
        return years;
    }
用法:

int age = CalcYears(DateTime.ParseExact(txtDateOfBirth.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture));


请查看这个链接,我检查过了。假设输入是DateTime格式的,我一直在用dd/mm/yyyyyy格式从textbox转换为DateTime。你可以使用Convert.ToDateTime(TextBox1.Text)。ToString(“dd/mm/yyyy”)或DateTime.TryParseExact(TextBox1.Text,“dd/mm/yyyy”,null,System.Globalization.datetimestyle.None)嘿,伙计,我们需要你的意见。您将如何使用以下方法?从医学角度来看,我的方法是不正确的,从用户角度来看是-50\50。我认为,如果你需要精确的计算,你应该使用马特的方法和发挥的比例。此外,我建议您显示月份和年份,以避免用户pov带来的混淆。显而易见的答案是,在你生日那天,你的年龄增长了一年。。。至少,我认为大多数人都是这样认为生日有效的这意味着,如果你出生在闰日,你必须等到3月1日才能过生日!这也意味着,如果你出生在3月1日,那么你仍然会在闰年的3月1日庆祝你的生日——你不会在2月29日庆祝生日。忽略那些天数不是365的年份,因为有些输入失败。@Matthew Watson-你能给我举个例子吗?当然可以:DOB=1964-03-16,TODAY=2013-03-16。年龄应该是49岁,但你的代码给出了48岁。我不确定像“365.24219”这样的魔术用法是否是好的解决方案。1/1/2012-12/30/2010=2,但实际年龄是1。引用的线程中的一个答案是正确的,但其中一些是错误的。你必须找到合适的人。:)什么是CommonClass?在许多情况下,这将无法给出正确的答案。此外,
365.25
是一个不正确的值。闰年并非每四年一次。以
00
结尾的年份不是闰年,除非它们的成百上千等也可以被4整除。所以,1900年不是闰年,但2000年是。为什么这次被否决?它已经过很好的测试,并给出了所有输入的正确答案。没有理由就否决某件事是毫无意义的,这是行不通的。尝试使用示例值:
12/30/2010
表示出生日期,而
表示今天的日期
。它返回
2011
-出生日期?它将通过文本框来自用户,因此不一定是YYYY/MM/dd格式。我的代码没有解析字符串,因为这已在其他注释中解决。我的代码只是使用DateTime对象计算年龄(以年为单位)。因此,格式是不相关的。代码确实有效。你显然还没有试过。372这个神奇数字是关于什么的?出生日期:1989年12月31日,今天:1990年1月1日。1990-1989年=1万。你看到那个0岁的人了吗?我同意你的例子在形式上是正确的,但从用户的角度来看,我认为不是。1989年12月31日出生,今天是2012年1月1日。计算年龄是23岁,实际年龄是22岁。Matten是正确的:这个代码绝对是错误的。好吧,我想我们需要主题启动者的意见,什么解决方案适合他的需要,然后对不起作用的答案进行更正。。。循环总是立即退出,因此如果fromDate比toDate早1年以上,它总是返回0。@MatthewWatson-谢谢我从VB转换了代码,但在发布之前没有测试它-现在应该可以工作了。