Olá!
Estou com o seguinte problema e gostaria de saber se podem me ajudar. Há dias estou no desenvolvimento de um método para mostrar a idade de uma pessoa no formato de anos, dias e meses. Ao realizar várias pesquisas sobre o assunto, decidi usar os métodos da API JODA TIME. Os anos e meses mostram corretamente, porém a contagem de dias está incorreta. Não consegui entender o que o método está fazendo. Segue abaixo o código:
import org.joda.time.format.*;
import org.joda.time.*;
public class TesteIdade{
public String diferenca_entre_datas(String data_inicio, String data_fim){
int ano_inicio = devolverAno(data_inicio);
int mes_inicio = devolverMes(data_inicio);
int dia_inicio = devolverDia(data_inicio);
int ano_fim = devolverAno(data_fim);
int mes_fim = devolverMes(data_fim);
int dia_fim = devolverDia(data_fim);
DateTime data_inicial_partes = new DateTime(ano_inicio, mes_inicio, dia_inicio, 0, 0, 0, 0);
DateTime data_final_partes = new DateTime(ano_fim, mes_fim, dia_fim, 0, 0, 0, 0);
Period per = new Period(data_inicial_partes, data_final_partes);
PeriodFormatter pf = new PeriodFormatterBuilder()
.printZeroAlways()
.appendYears()
.appendSuffix (" ano "," anos ")
//.appendSeparator("")
//.printZeroAlways()
.appendMonths()
.appendSuffix (" mes "," meses ")
//.printZeroAlways()
.appendWeeks()
//.printZeroAlways()
.appendDays()
.appendSuffix (" dia "," dias ")
.toFormatter();
String data_em_dia_mes_ano = pf.print(per);
return data_em_dia_mes_ano;
}
public int devolverAno(String data){
int ano = Integer.parseInt(data.substring(6,10));
return ano;
}
public int devolverMes(String data){
int mes = Integer.parseInt(data.substring(3,5));
return mes;
}
public int devolverDia(String data){
int dia = Integer.parseInt(data.substring(0,2));
return dia;
}
public static void main(String [] args){
String data_inicio = "10/10/2000";
String data_fim = "31/07/2012";
String data_inicio1 = "13/03/1983";
String data_fim1 = "30/07/2012";
TesteIdade idade = new TesteIdade();
System.out.println("Idade:" +idade.diferenca_entre_datas(data_inicio, data_fim));
System.out.println("Idade:" +idade.diferenca_entre_datas(data_inicio1, data_fim1));
}
}
O teste realizado com as datas inicio 10/10/2000 e fim 31/07/2012 apresentam o seguinte resultado: Idade:11 anos 9 meses 30 dias, mas 30 dias está incorreto, deveria mostrar 21.
O teste realizado com as datas inicio 13/03/1983 e fim 30/07/2012 apresentam o seguinte resultado: Idade:29 anos 4 meses 23 dias, 23 dias também está incorreto.