Subtração entre Date's

Fala galera, blza?

Estou tentando subtrair duas datas usando objetos do tipo Date, saca só:

import javax.swing.JOptionPane;
import java.util.Date;

public class Data
{
  public static void main(String Args[])
  {
    Data d = new Data();
		
    String dataAdminissao = JOptionPane.showInputDialog("Data de Adimissão:");
    String dataDemissao = JOptionPane.showInputDialog("Data de Demissão:");
		
    d.processo(dataAdminissao, dataDemissao);
  }
	
  public Date stringToDate(String data)
  {
    String[] diaMesAno = data.split("/");
		
    int dia = Integer.parseInt(diaMesAno[0]);
    int mes = Integer.parseInt(diaMesAno[1]);
    int ano = Integer.parseInt(diaMesAno[2]);
		
    return new Date(ano, mes, dia);
  }
	
  public void processo(String d1, String d2)
  {
    Date dataAdminissao = this.stringToDate(d1);
    Date dataDemissao = this.stringToDate(d2);
		
    Date dataDiferenca = new Date(dataDemissao.getTime() - dataAdminissao.getTime());
		
    JOptionPane.showMessageDialog(null, "Data de Admissão: " + d1 + "\nData de Demissão: " + d2 + "\n" + "\nDiferênça: " + dataDiferenca.getDate() + "/" + dataDiferenca.getMonth());
    
    System.exit(0);
  }
}

Coloquei o código completo da minha classe de teste, só para caso alguém preferir testar ao bater o olho no “erro”.

Enfim, quando imprimo meu teste na tela, sai assim:

Poutz, esse 31/0 (dia/mes) me deixou torto. Alguma sugestão do que pode ter acontecido?

Os meses em java vão de 0 a 11
0-> janeiro e
11 -> dezembro
:wink:

Tente subtrair em miliseconds através do método getTime algo do tipo

Date d1 = new Date();
Date d2 = new Date(); 

System.out.println(new Date(d2.getTime() - d1.getTime()));

Óbvio que nesse exemplo a diferença não vai ser muita mas é mais para simplificar

Cara, se o que vc está querendo fazer é encontrar a diferença em dias entre as duas datas vc pode fazer da seguinte forma:

   public void processo(String d1, String d2)
   {
     Date dataAdminissao = this.stringToDate(d1);
     Date dataDemissao = this.stringToDate(d2);
 		
     GregorianCalendar gcData1 = new GregorianCalendar( dataAdminissao.getYear(), dataAdminissao.getMonth(), dataAdminissao.getDate() );
     GregorianCalendar gcData2 = new GregorianCalendar( dataDemissao.getYear(), dataDemissao.getMonth(), dataDemissao.getDate() );
     
     // Captura a qtde de dias de cada data tendo como base de cálculo a data 01/01/1970
     float qtdDiasData1 = ( gcData1.getTime().getTime() / 24 / 60 / 60 / 1000 );
     float qtdDiasData2 = ( gcData2.getTime().getTime() / 24 / 60 / 60 / 1000 );
     
     // Subtrai a qtde de dias para saber a diferença em dias
     Float fqtde = new Float(qtdDiasData2 - qtdDiasData1);
	 int difEmDias =  fqtde.intValue();
	 
     JOptionPane.showMessageDialog(null, "Data de Admissão: " + d1 + "\nData de Demissão: " + d2 + "\n" + "\nDiferença: " + difEmDias + " dias");
     
     System.exit(0);
   }

Acho que assim resolve o seu problema. Testa esse código aí.
Flw

http://joda-time.sourceforge.net/

+1. Date e Calendar só servem pra fazer HelloWorld.