Pessoal,
preciso fazer a diferença entre duas datas, e retornar a quantidade de anos, meses e dias entre elas.
Ex: 10/10/2010 - 10/09/2010 = 0 anos, 1 mês, 0 dias.
Alguem sabe como faço isso?
Pessoal,
preciso fazer a diferença entre duas datas, e retornar a quantidade de anos, meses e dias entre elas.
Ex: 10/10/2010 - 10/09/2010 = 0 anos, 1 mês, 0 dias.
Alguem sabe como faço isso?
Use o operador de resto e a divisão.
Ou use a classe Period da API Joda-Time:
http://joda-time.sourceforge.net/
Eu uso a JODA time, mesmo não tendo tudo o que preciso é fácil conceber uma abstração poderosa em cima dela.
se ajudar tem o blog do meu professor que tem um topico falando como manipular datas
Veja se esse trecho de código resolve:
[code] public void diferencaEntreDatas(String d1, String d2) {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat(“dd/MM/yyyy”);
java.util.Date date1 = dateFormat.parse(d1);
java.util.Date date2 = dateFormat.parse(d2);
long newDate;
if (date1.after(date2)) {
newDate = date1.getTime() - date2.getTime();
} else {
newDate = date2.getTime() - date1.getTime();
}
GregorianCalendar gc = new GregorianCalendar();
gc.setTimeInMillis(newDate);
System.out.println("Diferença: " + gc.get(GregorianCalendar.YEAR) + " ano(s), "
+ (gc.get(GregorianCalendar.MONTH) + 1) + " mes(es), "
+ gc.get(GregorianCalendar.DAY_OF_MONTH) + " dia(s)");
} catch (ParseException ex) { //Lança exceção caso a data informada não esteja no formato "dd/MM/yyyy"
ex.printStackTrace(System.err);
}
}[/code]
Precisando, altere o código conforme a sua necessidade.
Opa… eae… espero que jah tenha achado a resposta… mas afim de deixar uma solução direto no post segue uma alteração do método do renato…
Renato, o problema no seu código está na hora de trazer a diferença entre os anos… uma vez que o ano ZERO do GregorianCalendar é 1969. Abaixo um método parecido… pode parecer um pouco mais simples mas é porque retirei a lógica de verificar qual a maior data e deixei para o cliente.
Outra coisa… se o resultado for referente a idade, não esqueça de diminuir UM ao ano para considerar a idade zero…
[code]public static void diferencaEntreDatas(String maiorData, String menorData) {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat(“dd/MM/yyyy”);
GregorianCalendar maior = new GregorianCalendar();
maior.setTime(dateFormat.parse(maiorData));
GregorianCalendar menor = new GregorianCalendar();
menor.setTime(dateFormat.parse(menorData));
GregorianCalendar dif = new GregorianCalendar();
dif.setTimeInMillis(maior.getTimeInMillis() - menor.getTimeInMillis());
System.out.println(maior.get(GregorianCalendar.YEAR));
System.out.println(menor.get(GregorianCalendar.YEAR));
System.out.println("Diferença: " + (maior.get(GregorianCalendar.YEAR)-menor.get(GregorianCalendar.YEAR)) + " ano(s), "
+ (dif.get(GregorianCalendar.MONTH) + 1) + " mes(es), "
+ dif.get(GregorianCalendar.DAY_OF_MONTH) + " dia(s)");
} catch (ParseException ex) { //Lança exceção caso a data informada não esteja no formato "dd/MM/yyyy"
ex.printStackTrace(System.err);
}
}[/code]
[]'s