Não consigo comparar datas

Olá pessoal!!! estou tentando comparar 2 datas e não estou conseguindo, não sei o que estou fazendo de errado. se puderem me ajudar eu agradeço.
segue abaixo o código.

[code]package zipnew;

import java.io.File;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JOptionPane;

public class Apagar {

public static void delete(Date d){
   String dirCamDigital = ("d:\Cam");
   File file;
   file = new File(dirCamDigital);
   File afile [] = file.listFiles();
  
     Calendar cal = Calendar.getInstance();
     cal.set (Calendar.HOUR, 0);
     cal.set (Calendar.MINUTE, 0);
     cal.set (Calendar.SECOND, 0);
   
     Date sysDate = cal.getTime();
    
     //JOptionPane.showMessageDialog(null,d +" "+"data escolhida");
     //JOptionPane.showMessageDialog(null,sysDate+" "+"data do sistema");

            if (afile.length==0){
             JOptionPane.showMessageDialog(null,"Não existem arquivos no dia escolhido para apagar!!!");
             return;

             }else{

            if (d.after(sysDate)){
               JOptionPane.showMessageDialog(null,"Escolha uma data valida!!!");
               return;

            }else{
            boolean teste = false;
            int i = 0;
            File arquivos = null;
            if((JOptionPane.showConfirmDialog(null ,"Vai mesmo apagar os arquivos?","Saída", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION )){

                for (int j = afile.length ; i<j; i++){

                Date fileDate = new Date(afile[i].lastModified());
                fileDate.setHours(0);
                fileDate.setMinutes(0);
                fileDate.setSeconds(0);
                
              //JOptionPane.showMessageDialog(null,fileDate+" "+"data do arquivo");
                        
                    if(d.compareTo(fileDate)==0){
                           arquivos = afile[i];
                           teste = true;
                        }
                      }
                     // if (teste==true){
                       //  arquivos.delete();
                      //   JOptionPane.showMessageDialog(null,"Arquivos deletados!!!");
                      //}else{

//JOptionPane.showMessageDialog(null,“Não existem arquivos no dia escolhido para apagar!!!”);
}
}
}
}
}
[/code]

Comprar vc está conseguindo sim. O q faz com q ele não entre dentro do if é a diferença nos millisegundos.

O interessante seria trabalhar com a classe Calendar.

Por exemplo:
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2010);
c.set(Calendar.MONTH, 08 );
c.set(Calendar.DATE, 13);

ou tem outros jeitos de se fazer a mesma coisa só q mais fácilmente. Mas para entender melhor isso aí basta.
E pra pegar o Date do objeto c é só usar o método getTime();
c.getTime();

O calendar também tem o .lastModified() ?
E como é o comando para alterar o millisegundos???

Obrigado pela atenção.

Então cara. Na documentação tem isso.
É assim:

c.set(Calendar.MILLISECOND, 0);

ou então

c.clear(Calendar.MILLISECOND);

o que faz esse método “lastModified()” ?
não tem não… nem no Calendar nem no Date…

o “lastModified()” retorna a data da ultima modificação do arquivo; isso usando o calendar eu sei que da… mais como fazer com o que vem do “lastModified()” ???
Desculpe a ignorância sou iniciante aprendendo.
getDate() que é um metodo do jCalendar1 retorna um date… e nao sei como fazer para converter o date para calendar…

ahhh … intendiii …
Tranquilo cara.
O Calendar tem métodos para isto. Aconselho a dar uma olhada no javadocs.
Mas tem um assim:

c.setTime(file.lastModified());

Esse resolvi com a sua dica obrigado!!!

cal.setTime(fileDate); fileDate= new Date(afile[i].lastModified()); cal.set (Calendar.HOUR, 0); cal.set (Calendar.MINUTE, 0); cal.set (Calendar.SECOND, 0); cal.set (Calendar.MILLISECOND, 0);

Esse tinha o new… mais com esse outro não fincionou…

databkp = jCalendar1.getDate(); Calendar cal = Calendar.getInstance(); cal.setTime(databkp); cal.set (Calendar.HOUR,0); cal.set (Calendar.MINUTE,0); cal.set (Calendar.SECOND,0); cal.set (Calendar.MILLISECOND,0); JOptionPane.showMessageDialog(null,databkp +" "+"data escolhida");

tem alguma dica para me dar?

Obrigado

O q não funcionou ?
Deu alguma excessão?

No caso de exibir datas, o melhor é usar o SimpleDateFormat.

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String s = sdf.format(new Date()); // new Date() retorna a data atual em um objeto do tipo Date

[quote=aluisiodsv]O q não funcionou ?
Deu alguma excessão?

No caso de exibir datas, o melhor é usar o SimpleDateFormat.

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); String s = sdf.format(new Date()); // new Date() retorna a data atual em um objeto do tipo Date [/quote]

Eu usei o JOptionPane para ver se estava zerando a hora, minutos, segundos e milisegundos, e é exatamente esse o problema… no outro codigo que usa o new funcionou perfeitamente… nesse que eu uso o Jcalendar ele não altera os dados da data…

Calendar cal = Calendar.getInstance(); databkp = new Date(); cal.setTime(databkp); databkp = jCalendar1.getDate(); cal.set (Calendar.HOUR,0); cal.set (Calendar.MINUTE,0); cal.set (Calendar.SECOND,0); cal.set (Calendar.MILLISECOND,0);

Se olhar bem no código vai perceber uma pequena falta de atenção.

Calendar cal = Calendar.getInstance();  
databkp = new Date();  
databkp = jCalendar1.getDate();  
cal.setTime(databkp);                         // Inverti esta linha com a de cima. Primeiro seta a data e depois seta o calendar.
cal.set (Calendar.HOUR,0);  
cal.set (Calendar.MINUTE,0);  
cal.set (Calendar.SECOND,0);  
cal.set (Calendar.MILLISECOND,0);  

Aprendar a fazer debug. Muuuuito útil e vc pegaria o erro de cara!

mesmo mudando a ordem ele continua sem zerar o horário…
eu testei essas combinações antes de testar :smiley:
Ele apenas ignora os comandos:cal.setTime(databkp); cal.set (Calendar.HOUR,0); cal.set (Calendar.MINUTE,0); cal.set (Calendar.SECOND,0); cal.set (Calendar.MILLISECOND,0);
e deixa tudo igual… Thu Aug 12 16:44:22 BRT 2010 :?:

O calendar não ignora os comandos não.
O q deve estar acontecendo é q vc deve estar exibindo outra data e não a do calendar.

use o c.getTime(); para retornar um Date para a variável q vc quer.

mesmo assim ele não zera…

Calendar cal = Calendar.getInstance(); databkp = new Date(); //databkp = jCalendar1.getDate(); databkp = cal.getTime(); cal.setTime(databkp); cal.set (Calendar.HOUR,0); cal.set (Calendar.MINUTE,0); cal.set (Calendar.SECOND,0); cal.set (Calendar.MILLISECOND,0); JOptionPane.showMessageDialog(null,databkp +" "+"data escolhida");

Sei que é alguma coisa boba…

Assim consegui zerar o horario…

 Calendar cal = Calendar.getInstance();
           databkp = new Date();
           cal.setTime(databkp);
           cal.set (Calendar.HOUR,0);
           cal.set (Calendar.MINUTE,0);
           cal.set (Calendar.SECOND,0);
           cal.set (Calendar.MILLISECOND,0);
         
           databkp = cal.getTime();

Porem quando tento o mesmo puxando do jCalendar; não consigo zerar a data…

Realmente uma coisa muuuuuuuuuuuuuuuuuuuuuuuito boba !! aUHUAhUaUHUAhUaUha

databkp = jCalendar1.getDate();  

Calendar cal = Calendar.getInstance();  
cal.setTime(databkp);
cal.set (Calendar.HOUR,0);
cal.set (Calendar.MINUTE,0);
cal.set (Calendar.SECOND,0);
cal.set (Calendar.MILLISECOND,0);

databkp = cal.getTime();           // Aqui está o pulo do gato

JOptionPane.showMessageDialog(null,databkp +" "+"data escolhida");

Testa aí e me fala se deu certo.

Funcionou!!!
Essa não esqueço nunca mais!!!

Agora so falta saber se enfim ele vai entrar no meu if… :lol:

Obrigado!!!

Comigo foi assim.

No começo vc tenta, tenta, tenta … até conseguir.
Hj em dia tbm, tento, tento, tento … até conseguir.

A única coisa q muda é a quantidade de linhas q está sempre aumentaaandooo… e tbm a experiência!

Agora estou com esse problema e empacado… :frowning:
consegui colocar as 2 datas iguais… tudo zerado para poder comparar apenas os dd/mm/aaaa, verifiquei os “longs” pelo debug do netbeans e ate isso eles estão iguais… porem ele continua sem entrar no if.

Codigo da data escolhida:

databkp = jCalendar1.getDate(); Calendar cal = Calendar.getInstance(); cal.setTime(databkp); cal.set (Calendar.HOUR,0); cal.set (Calendar.MINUTE,0); cal.set (Calendar.SECOND,0); cal.set (Calendar.MILLISECOND,0); databkp = cal.getTime();

Codigo que pega a data do arquivo:

fileDate= new Date(afile[i].lastModified()); Calendar calFile = Calendar.getInstance(); calFile.setTime(fileDate); calFile.set (Calendar.HOUR, 0); calFile.set (Calendar.MINUTE, 0); calFile.set (Calendar.SECOND, 0); calFile.set (Calendar.MILLISECOND, 0); fileDate = calFile.getTime();

If que compara ambos

if(d.equals(fileDate)){ arquivos = afile[i]; }

Alguem pode me falar onde estou errando???

Obrigado

Edit: CONSEGUI!!! por algum motivo estava saindo assim: dd/mm/aaaa 12:00:00 quando deveria sair: dd/mm/aaaa 00:00:00

eu adicionei isso: fileDate.setHours(0); e funcionou… isso é considerado bacalhau???

Vou propor outra solução para vc.

Use o SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String data = "";

data = sdf.format(jCalendar1.getDate());
Date databkp = sdf.parse(data);

data = sdf.format(afile[i].lastModified());
Date fileDate = sdf.parse(data);

if (databkp.equals(fileDate)) {
    arquivos = afile[i];
}