CompareTo não funciona direito

Pessoal preciso de uma ajuda de vcs em relação ao uso do método compareTo. Pois não está funcionado direito comigo.

Segue o código abaixo:

[code] GregorianCalendar calendar = new GregorianCalendar();
Date dataAtual = calendar.getTime();
Date horaAtual = calendar.getTime();

   SimpleDateFormat formatData = new SimpleDateFormat("dd/MM/yyyy");
   SimpleDateFormat formatHora = new SimpleDateFormat("HH:mm:ss");
   String novoFormatoDataAtual = formatData.format(dataAtual);
   String novoFormatoDataUsuario = formatData.format(data2); //data2= data passada pelo usuário
   String novoFormatoHoraAtual = formatHora.format(horaAtual);
   String novoFormatoHoraUsuario = formatHora.format(hora); //hora= data passada pelo usuário


    //compara as datas e as horas
    int comparacaoData = novoFormatoDataUsuario.compareTo(novoFormatoDataAtual);
    int comparacaoHora = novoFormatoHoraUsuario.compareTo(novoFormatoHoraAtual);[/code]

É o seguinte na linha:

int comparacaoData = novoFormatoDataUsuario.compareTo(novoFormatoDataAtual);

está retornado -1, sendo que o valor de novoFormatoDataUsuario é 12/12/2012 e o valor de novoFormatoDataAtual é 27/05/2011

Não era para retornar POSITIVO?

Desde já agradeço a ajuda de vcs!

Jovem,

Você quer comparar duas datas utilizando String ???

Por que você nao usa o compareTo do date?

Tenho quase certeza o que você esta fazendo não vai funcionar, comparar duas strings como se fosse data.

Por exemplo neste codigo vai ser impresso “-1”.

  String a = "1";
  String b = "22";		
   System.out.println(a.compareTo(b));

abs,

não precisa formatar em string pra comparar
utilize o Calendar do java.util.Calendar ele tem o método compareTo

como o Kanin Dragon mencionou, utilize variáveis do tipo Date para a comparação

OK, amigo!

Você poderia me auxiliar no uso do compareTo do Date?

Desde já agradeço!

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#compareTo(java.util.Calendar)

o método compareTo irá retornar:
0, se iguais;
Positivo, se o primeiro elemento for MAIOR que o segundo
Negativo, se o primeiro elemento for MENOR que o segundo

        Integer a = 5;
        Integer b = 10;
        String aa = "12/12/2012";
        String bb = "27/05/2011";
        
        //a < b
        int comparacaoData = a.compareTo(b);
        int comparacaoHora = b.compareTo(a);
        int comparacaoData1 = aa.compareTo(bb);
        int comparacaoHora1 = bb.compareTo(aa);
        System.out.println(comparacaoData + " " + comparacaoHora);
        System.out.println(comparacaoData1 + " " + comparacaoHora1);

Testa aí…
Aqui saiu -1 -1 e -1 -1

Date a = new Date();
Date b = new Date();

int resultado = a.compareTo(b);

System.out.println(resultado);

Amigos, obrigado pela ajuda.

Mais uma dúvida. Como eu converto a data que o usuário digitar no formulário que uma uma String para o formato Date para que eu possa usar o método CompareTo com datas???

Obrigado

Jovem,

Seguindo o seu código seria desta forma.

formatData.getCalendar();

Abs,

Acho que o SimpleDateFormat resolve

String sdate = "27/05/2011";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date novaData = sdf.parse(sdate);

Sim. Strings representam texto, somente texto e nada mais do que texto. Se o texto de entrada do seu usuário, pode ser convertido para um tipo mais apropriado, converta-o.

Pessoal está ocorrendo mais um erro. É o seguinte estou comparando as datas no formato Date, até aí tudo beleza, mas quando comparo as datas sendo iguais, ou seja, o mesmo o compareTo retorna o valor -1.

As datas estão sendo comparadas da seguinte forma:

OBS: é cmo está saindo no System.out.println

Data passada pelo usuário: 2011-05-29
Data passada atual: Mon May 30 09:08:30 BRT 2011
ComareTo -1

Desde já agradeço.

Observe que na comparação ele leva em consideração as horas, minutos, segundos e centézimos. Zere esses campos das duas datas se você quiser só comparar dias.

OK, amigo!

Mas, como eu faço para deixar a dataAtual no formato yyyy-MM-dd ???

OBS: Deixando-o a mesma no formato Date, ou seja, sem converter para String.

Obrigado,

pode fazer assim:

Date data = new Date();
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 System.out.println(sdf.format(data));

Esqueça o formato. Para o Date isso não é relevante.

Mas, basicamente, basta copiar seu Date para outro Date:

Date dataSemHoras = new Date(dataComHoras.getYear(), dataComHoras.getMonth(), dataComHoras.getDate());

Detalhe. Ao invés de trabalhar com objeto do tipo Date, considere fortemente a possibilidade de trabalhar com objetos da classe Calendar. O calendar é o substituto do date.

Outra possibilidade é usar o JODA-Time, que tem a classe DateMidnight:
http://joda-time.sourceforge.net/

Amigo,

Assim a data fica como String. Aí a comparação entre datas não funciona.

Obrigado,

Obrigado ViniGodoy!!!

Agora funcionou!!!

Muito obrigado mesmo!