umashankarsahu Ответов: 5

Как рассчитать возраст с помощью C#


Привет сэр

Я хочу сказать, что создаю регистрационную форму для правильной работы.
я сделал код для get age, но он не работает должным образом .
я хочу год, месяц день, но мой код только показать год, как будет получать год месяц и дни
это мой код.
private void button1_Click(object sender, EventArgs e)
{
   DateTime dob = Dob_dateTimePicker.Value;
   DateTime PresentYear = Current_dateTime.Value;
            

   TimeSpan ts = PresentYear - dob;
   int Age = ts.Days / 365;

   textBox1.Text = Age.ToString() ;+//" Year" + "Month" +"Days";
           
} 


Пожалуйста ,объясните мне, как получить возраст = год, месяц и дни

С уважением
Умашанкар Саху

5 Ответов

Рейтинг:
36

Suvabrata Roy

DateTime dob = Convert.ToDateTime("18 Feb 1987");
            DateTime PresentYear = DateTime.Now;
            TimeSpan ts = PresentYear - dob;
            DateTime Age = DateTime.MinValue.AddDays(ts.Days);
            MessageBox.Show(string.Format(" {0} Years {1} Month {2} Days", Age.Year - 1, Age.Month - 1, Age.Day - 1));


Thomas Daniels

+5!

Рейтинг:
28

Kiran Susarla

Пройти через это. у вас есть полный код для расчета возраста.
http://raasukutty.wordpress.com/2009/06/18/c-calculate-age-in-years-month-and-days/[^]


Thomas Daniels

+5!

Рейтинг:
28

wmdroshan

Привет,

DateTime age = new DateTime(PresentYear.Subtract(dob).Ticks);
Должен делать свою работу. Если вы хотите вывести читаемый формат,
textBox1.Text = age.Year.ToString() + " years " + age.Month.ToString() + " months " + age.Day.ToString() + " days ";
все должно быть в порядке.

С уважением.


CHill60

Показывает неправильный возраст.

Рейтинг:
2

Member 13421018

private void Agebutton_Click(object sender, EventArgs e)
{
    try
    {
        String date = DateTime.Now.Subtract(dateTimePicker1.Value).ToString();
        int days = Convert.ToInt16(date.Substring(0, date.IndexOf(".")));
        int years = (days / 365);
        int months = (days % 365) / 30;
        int weeks = ((days % 365) % 30) / 7;
        MessageBox.Show("Age=" + years + " yrs, " + months + " month's, " + weeks + " weeks", "Age calculator");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message,"Date exception");
    }
}


CHill60

Я считаю, что есть несколько причин, по которым ваше решение отвергается.
1. вопрос был задан и на него был дан ответ 6,5 лет назад, и вы действительно ничего не добавили к существующим решениям.
2. Решение использует функцию Convert, которая, вероятно, почему вы добавили ненужных попробовать-поймать - вместо функции использовать метод tryparse.
3. Если вы протестируете свой код в подходящем диапазоне дат, вы обнаружите ошибки. Если вам нужен "средний" месяц, не используйте магическое число (еще одна причина понизить голос) 30 ... 30,5 будет более "точным" и все еще неправильным в некоторых случаях.

Причина, по которой решение 2 получает много голосов вверх? Он использует DateTime и Timespan. Конечно, он также использует функцию преобразования - однако предоставленное значение является однозначным.

Рейтинг:
1

Member 14571019

<pre>private void datediff(TextBox d1, Label lbl, TextBox d2 = null)
        {
            int days;
            int months;
            int years;
            string date2;
            if(d2 == null)
            {
                date2 = "31/08/2019";
            }
            else
            {
                date2 = d2.Text;
            }
            try
            {
                // First Date //
                int bd = Convert.ToInt32(d1.Text.Split('/')[0]);
                int bm = Convert.ToInt32(d1.Text.Split('/')[1]);
                int by = Convert.ToInt32(d1.Text.Split('/')[2]);
                // Second Date //
                
                int cd = Convert.ToInt32(date2.Split('/')[0]);
                int cm = Convert.ToInt32(date2.Split('/')[1]);
                int cy = Convert.ToInt32(date2.Split('/')[2]);
                //**************//
                int[] mA = { 31, 28, 31, 30, 31, 30,
                      31, 31, 30, 31, 30, 31 };
                if ((cy % 4 == 0) && (cy % 100 != 0))
                {
                    mA[1] = 29;
                }
                if (cd < bd)   
                {
                    if (cm == 1)
                    {
                        cm = cm + 12;
                        cy = cy - 1;
                    }
                    cm = cm - 1;
                    cd = cd + mA[cm - 1];
                    
                }
                if (cm < bm)  
                {
                    cm = cm + 12;
                    cy = cy - 1;                    
                }
                days = cd - bd;
                months = cm - bm;
                years = cy - by;
                if (years < 0)
                {
                    Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Alert", "alert('From Date cannot be after the To Date')", true);
                    d1.Text = null;
                    if (d2 != null)
                    {
                        d2.Text = null;
                    }
                    lbl.Text = null;
                }
                else
                { 
                    lbl.Text = years + " Year " + months + " Month " + days + " Day";
                    lbl.Attributes.CssStyle.Add("color", "#3e4095");
                }
            }
            catch (Exception ex)
            {
                lbl.Text = "Please Fill value in correct format (dd/MM/yyyy)";
                lbl.Attributes.CssStyle.Add("color", "red");
                d1.Text = null;
                if (d2 != null)
                {
                    d2.Text = null;
                }
            }
        }