Cálculo correto da idade em dias meses e anos - C#
É criado um método em C# que calcula a idade de uma pessoa em dias meses e anos de forma correta Os parâmetros a serem fornecidos são a data de nascimento e a data na qual a idade vai ser calculada.
O código a seguir é bastante simples:
// Parametro dNascimento - data em que a pessoa nasceu
// Parametro dAtual- data na qual a idade vai ser calculada
string calculaIdade(DateTime dNascimento, DateTime dAtual)
{
int idDias = 0, idMeses = 0, idAnos = 0;
DateTime dNascimentoCorrente = DateTime.Parse(dNascimento.Day.ToString() + "/" +
dNascimento.Month.ToString() + "/" + (dAtual.Year - 1).ToString());
string ta = "", tm = "", td = "";
if (dAtual < dNascimento)
{
return "Data de nascimento inválida ";
}
idAnos = dAtual.Year - dNascimento.Year;
if (dAtual.Month < dNascimento.Month || (dAtual.Month ==
dNascimento.Month && dAtual.Day < dNascimento.Day))
{
idAnos--;
}
idMeses = calculaMeses(dAtual, dNascimento);
idDias = calculaDias(dAtual, dNascimento);
if (idAnos > 1)
ta = idAnos + " anos ";
else if (idAnos == 1)
ta = idAnos + "ano";
if (idMeses > 1)
tm = idMeses + " meses ";
else if (idMeses == 1)
tm = idMeses + " mês ";
if (idDias > 1)
td = idDias + " dias ";
else if (idDias == 1)
td = idDias + " dia ";
return ta + tm + td;
}
int calculaDias(DateTime dataAtual, DateTime dataOriginal)
{
int numeroDias = 0;
if ((dataAtual.Month > dataOriginal.Month || dataAtual.Month <
dataOriginal.Month) && (dataAtual.Day > dataOriginal.Day))
{
DateTime dUltima = DateTime.Parse(dataOriginal.Day.ToString() + "/" +
(dataAtual.Month).ToString() + "/" + (dataAtual.Year).ToString());
numeroDias = (dataAtual - dUltima).Days;
}
else if ((dataAtual.Month > dataOriginal.Month || dataAtual.Month <
dataOriginal.Month) && (dataAtual.Day < dataOriginal.Day))
{
DateTime dUltima = DateTime.Parse(dataOriginal.Day.ToString() + "/" +
(dataAtual.Month - 1).ToString() + "/" + (dataAtual.Year).ToString());
numeroDias = (dataAtual - dUltima).Days;
} else if (dataOriginal.Month == dataAtual.Month)
{
DateTime dUltima = DateTime.Parse(dataOriginal.Day.ToString() + "/" +
(dataAtual.Month).ToString() + "/" + (dataAtual.Year).ToString());
numeroDias = (dataAtual - dUltima).Days;
}
return numeroDias;
}
int calculaMeses(DateTime dataAtual, DateTime dataOriginal)
{
int numeroMeses = 0;
if ((dataAtual.Month > dataOriginal.Month))
{
numeroMeses = dataAtual.Month - dataOriginal.Month;
}
else if ((dataAtual.Month < dataOriginal.Month))
{
if (dataAtual.Day > dataOriginal.Day)
{
numeroMeses = (12 - dataOriginal.Month) + (dataAtual.Month);
}
else if (dataAtual.Day < dataOriginal.Day)
{
numeroMeses = (12 - dataOriginal.Month) + (dataAtual.Month - 1);
}
}
return numeroMeses;
}Confira também
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo