[Resolvido] Comparação entre datas

Galera, procurei no fórum mas não encontrei nada que pudesse me ajudar…
O problema é que preciso comparar duas datas…uma armazenada e outra vem do pc (data atual)…
Tentei fazer usando compareTo mas só retorna false…
Alguém poderia me ajudar?


public class Data {
    int dia;
    int mes;
    int ano;


    Data(){
        Calendar calendario = Calendar.getInstance();
        dia = calendario.get(Calendar.DAY_OF_MONTH);
        mes = calendario.get(Calendar.MONTH);
        ano = calendario.get(Calendar.YEAR);
        System.out.println(Feriado(calendario));
        
   }

private String Feriado(Calendar dt){

         String entrada="21/04/2012";
         String nome= "Tiradentes";
         String[] data = entrada.split("\\/");
         Calendar folga = Calendar.getInstance();
         folga.set(Calendar.DAY_OF_MONTH, Integer.parseInt(data[0]));
         folga.set(Calendar.MONTH, Integer.parseInt(data[1]));
         folga.set(Calendar.YEAR,Integer.parseInt(data[2]));
         if(folga.compareTo(dt)==0){
             return "Feriado de "+nome;
         }else{
             return "Não é feriado";
         }
         

     }

Cara, eu comprado dessa forma:

public boolean verificavencimento(Date emissao, Date vencimento){
		
	boolean data;
	if (emissao.before(vencimento)){
			
		data = true;
	}
	else if (emissao.after(vencimento))
		data = false;
	else
		data = true;
	
	return data;
}

Sim, sim mas nesse caso quero saber se é igual

Bom fiz uns testes aqui e mudei o calendario do pc para 21/04/2012, visto que o equals de Date é implementado como o codigo abaixo:

public boolean equals(Object obj) { return obj instanceof Date && getTime() == ((Date) obj).getTime(); }

Fiz o teste com o codigo abaixo verifique por favor se atende sua dúvida e qualquer coisa poste novamente, se der certo poste também,
Segue abaixo:

[code]package formatacao;

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Data {

public static void main(String[] args) {
	new Data();
}

int dia;
int mes;
int ano;

Data() {
	Calendar calendario = Calendar.getInstance();
	dia = calendario.get(Calendar.DAY_OF_MONTH);
	mes = calendario.get(Calendar.MONTH);
	ano = calendario.get(Calendar.YEAR);
	System.out.println(Feriado(calendario));

}

private String Feriado(Calendar dt) {

	String entrada = "21/04/2012";
	String nome = "Tiradentes";
	String[] data = entrada.split("\\/");
	Calendar folga = Calendar.getInstance();
	folga.set(Calendar.DAY_OF_MONTH, Integer.parseInt(data[0]));
	folga.set(Calendar.MONTH, Integer.parseInt(data[1])-1);
	folga.set(Calendar.YEAR, Integer.parseInt(data[2]));
	
	SimpleDateFormat df = new SimpleDateFormat("dd/MMMM/yyyy");
	System.out.println(df.format(folga.getTime()));
	System.out.println(df.format(dt.getTime()));
	
	System.out.println(folga.getTimeInMillis());
	System.out.println(dt.getTimeInMillis());
	
	if (folga.getTime().equals(dt.getTime())) {
		return "Feriado de " + nome;
	} else {
		return "Não é feriado";
	}

}

}
[/code]

para comparar dois Calendar se são iguais você pode usar equals… se uma de suas datas estáno formato string você pode passar para date com DateFormat e de date para Calendar criando um Calendar e passado seu Date no método setTime desse Calendar… até tem um método “set” que recebe 3 inteiros para dia mês e ano mas se você tem api para isso ficar separando string por barra, transformando em inteiro… enfim me parece meio ruim…

E lembre-se que os meses começam em 0 sendo assim tem ajuste la na data para o mes 4(maio) ficando para abril 4-1.

Agora para comparar Calendar pelo que vi no javaDoc do proprio método sobrescrito creio que deva usar compareTO repare no java Doc abaixo:

/** * Compares this &lt;code&gt;Calendar&lt;/code&gt; to the specified * &lt;code&gt;Object&lt;/code&gt;. The result is &lt;code&gt;true&lt;/code&gt; if and only if * the argument is a &lt;code&gt;Calendar&lt;/code&gt; object of the same calendar * system that represents the same time value (millisecond offset from the * <a >Epoch</a>) under the same * &lt;code&gt;Calendar&lt;/code&gt; parameters as this object. * * <p>The &lt;code&gt;Calendar&lt;/code&gt; parameters are the values represented * by the &lt;code&gt;isLenient&lt;/code&gt;, &lt;code&gt;getFirstDayOfWeek&lt;/code&gt;, * &lt;code&gt;getMinimalDaysInFirstWeek&lt;/code&gt; and &lt;code&gt;getTimeZone&lt;/code&gt; * methods. If there is any difference in those parameters * between the two &lt;code&gt;Calendar&lt;/code&gt;s, this method returns * &lt;code&gt;false&lt;/code&gt;. * * <p>Use the {@link #compareTo(Calendar) compareTo} method to * compare only the time values. * * @param obj the object to compare with. * @return &lt;code&gt;true&lt;/code&gt; if this object is equal to &lt;code&gt;obj&lt;/code&gt;; * &lt;code&gt;false&lt;/code&gt; otherwise. */

Use compareTo(Calendar)compareTo method to compare only the time values.

Putz agora deu certo…O problema estava no mês pois ele começa contando do 0 (zero), ou seja sempre estava um mês a frente…Vlw Galera…
Foi só alterar essa linha colocando o -1

folga.set(Calendar.MONTH, Integer.parseInt(data[1])-1);

Bom para finalizar estava vendo aqui a respeito se fosse usar o compareTO apenas com calendar…

Desta forma não se esqueça de zerar os segundos milisegundos e hora se não o resultado fica inconsistente segue abaixo como seria…

package formatacao;

import java.text.SimpleDateFormat;
import java.util.Calendar;
  
public class Data {  
      
    public static void main(String[] args) {  
        new Data();  
    }  
      
    int dia;  
    int mes;  
    int ano;  
  
    Data() {  
        Calendar calendario = Calendar.getInstance();  
        calendario.set(Calendar.HOUR, 0);
        calendario.set(Calendar.MINUTE,0);
        calendario.set(Calendar.SECOND, 0);
        calendario.set(Calendar.MILLISECOND,0);
       
        dia = calendario.get(Calendar.DAY_OF_MONTH);  
        mes = calendario.get(Calendar.MONTH);  
        ano = calendario.get(Calendar.YEAR);  
        System.out.println(Feriado(calendario));  
  
    }  
  
    private String Feriado(Calendar dt) {  
  
        String entrada = "21/04/2012";  
        String nome = "Tiradentes";  
        String[] data = entrada.split("\\/");  
        Calendar folga = Calendar.getInstance();  
        
        folga.set(Calendar.DAY_OF_MONTH, Integer.parseInt(data[0]));  
        folga.set(Calendar.MONTH, Integer.parseInt(data[1])-1);  
        folga.set(Calendar.YEAR, Integer.parseInt(data[2]));  
        folga.set(Calendar.HOUR, 0);
        folga.set(Calendar.MINUTE,0);
        folga.set(Calendar.SECOND, 0);
        folga.set(Calendar.MILLISECOND,0);
       
          
       if(dt.compareTo(folga)==0){
    	   return "feriado";
       }else{
    	   return "não é feriado";
       }
    
    }  

}

por favor edite o post e coloque [Resolvido]