Não consigo comparar datas

17 respostas
leandrogbraga

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.

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!!!");
     }
    }
   }
  }
 }

17 Respostas

aluisiodsv

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();
leandrogbraga

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

Obrigado pela atenção.

aluisiodsv

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…

leandrogbraga

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…

aluisiodsv

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());

leandrogbraga

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

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
leandrogbraga

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

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);

aluisiodsv

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!

leandrogbraga

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 :?:

aluisiodsv

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.

leandrogbraga

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…

aluisiodsv

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.

leandrogbraga

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

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

Obrigado!!!

aluisiodsv

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!

leandrogbraga

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???

aluisiodsv

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];
}
Criado 13 de agosto de 2010
Ultima resposta 16 de ago. de 2010
Respostas 17
Participantes 2