none
CALCULAR DIFERENÇA ENTRE DATAS EM ANO, MES E DIA

    Pergunta

  • BOA NOITE, ESTOU TENTANDO CALCULAR A DIFERENÇA EM ANO, MES E DIA ENTRE DUAS DATAS NO C#, SÓ TEM UM PROBLEMA, O CALCULO ESTAR SAINDO ERRADO, POIS A DIFERENÇA ENTRE AS DATAS 15/06/1998 E 14/10/2013 É PRA DAR 15 ANOS, 03 MESES E 29 DIAS, E ESTAR SAINDO 15 ANOS, 04 MESES E 05 DIAS, VEJA CODIGO ABAIXO:

    TimeSpan Diferenca = Convert.ToDateTime(txtDataFinal.Text) - Convert.ToDateTime(txtDataInicial.Text);
    int TotalDias = Diferenca.Days;
    int ano = (TotalDias / 365);
    int mes = (((TotalDias - (ano * 365)) / 30));
    int dia = (TotalDias - (ano * 365))-(mes * 30);
    listBox1.Items.Add(TotalDias +"\t" + ano + "\t" + mes + "\t" + dia);

    OBS1: AO VERIFICAR O TOTAL DE DIAS ENTRE AS DATAS NO CODIGO ACIMA, FOI ENCONTRADO 5600 DIAS, E FAZENDO O MESMO CALCULO MANUALMENTE FOI ENCONTRADO 5594, OU SEJA, UMA DIFERENÇA DE 06 DIAS. COMO EU RESOLVO ESSE ALGORITO?

    terça-feira, 15 de outubro de 2013 02:23

Todas as Respostas

  • Opa blz, cara fiz uns testes aqui utilizando o AddDays do DateTime e realmeste esta dando os 5601 dias, não entendi porque vc esta achando que esta incorreto e nao consegui chegar no calculo dos 5594 dias!!!

    meus testes:

    	    TimeSpan diferenca = DateTime.Now.Date - Convert.ToDateTime("15/06/1998");
                DateTime dataEncontrada = DateTime.Now.AddDays(-diferenca.Days);
                MessageBox.Show(string.Format("Data encontrada: {0}", dataEncontrada.Date.ToString()));
                dataEncontrada = dataEncontrada.AddDays(diferenca.Days);
                //CONTEUDO DEVE EXIBIR A DATA ATUAL
                MessageBox.Show(string.Format("Data atual: {0}", dataEncontrada.Date.ToString()));
                MessageBox.Show(DateTime.Now.AddDays(-5595).ToString());

    terça-feira, 15 de outubro de 2013 10:35
  • realmente eu também não sei o problema. quando eu subtraio as datas na ponta do lápis dar certinho os 15a, 4m e 0d, e com esse algoritmo que postei e outro que pesquisei na web, sempre dão errados. ou seja sempre são acrescentados 6 a mais no total de dias.

    terça-feira, 15 de outubro de 2013 10:45
  • o calculo que vc esta fazendo, esta sendo feito sempre em cima de 30 dias??

    talvez essa pode ser a diferença desses poucos dias que vc esta encontrando!

    terça-feira, 15 de outubro de 2013 11:18
  • Olá Limdembergi,

    O erro de seu algorítimo este justamente na quantidade de dias do ano, pois anos bissexto tem 366 e não 365 dias, e o seu algorítimo não identifica isso. Veja este link com sugestão de algorítimo para solucionar este problema:

    http://www.codeproject.com/Articles/28837/Calculating-Duration-Between-Two-Dates-in-Years-Mo

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    terça-feira, 15 de outubro de 2013 13:04
  • valeu Vitor Mendes, nem me atentei a esse detalhe, vou verificar o link e recriar o algoritmo, postarei o resultado em caso positivo, valeu...
    terça-feira, 15 de outubro de 2013 15:57