Comparaçao de Date

6 respostas
couta
e ai...alguem pode me ajudar.. estou fazendo um sistema que o usuario informa a data de aniversario que é uma String "dd/MM/yyyy" e converto ela para um Date
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy")
		try{
		  setNi(sdf.parse(getNiver())); //setNi é um Date e getNiver é uma string no caso a data q o usuario passo
	                 }catch (Exception e) {
	                 }

ai na outra classe onde irei fazer a comparaçao da data atual do SO com a data de aniversario não ta dando certo
nao ta comparando to fazendo assim:

Date d=new Date(); // peguei a data completa do SO
SimpleDateFormat sdf =new SimpleDateFormat("dd/MM/yyyy"); 
sdf.format(d); // to formatando o Date no formarto igual a data q o usuario passou "dd/MM/yyyy"

Cidadao ci=null; //Cidadao é classe onde esta a data de aniversario
for(int i=0;i<vec.size();i++){
    ci=(Cidadao)vec.get(i);
    if(d.equals(ci.getNi())){//to comparando a Date d (do Sistema Operacional) com a Date do usuario
            saida+=ci+"\n";
     }
 }System.out.println("testee:\n"+saida);

mas nao ta entrando nesse "if" nao sei o que to fazendo de errado..
se eu converter todas as datas para uma String ai da certo, mas eu quero converter tudo para Date e comparar
Date com Date
abraçoo

6 Respostas

Marlon_Meneses

é o seguinte…
qndo vc faz um Data d = new Date(); vc está pegando a data do sistema e tb a hora

entao qndo vc faz d.equals(ci.getNi()) está sendo comparado o objeto por completo incluindo a hora!
entao seta todas as horas, minutos e segundos(incluindo a do sistema) com 0

B

Um aviso sobre o Date, ele não trata somente de ano, meses e dias, como também horas, minutos, segundos e milésimos de segundo.

Comparar uma data de aniversário com a data atual seria comparar o dia 08/07/2009 00:00:00.000 com 08/07/2009 12:30:59.123. As datas não são iguais.

Use o Calendar da API do Java para retirar o tempo e comparar com a meia-noite de cada dia.

Ou estude sobre o JodaTime para esse tipo e outros tipos de problemas como ele mais facilmente.

danferreir4

Couta…

tenta usar o compareTo()

d.compareTo(ci.getNi() == 0)

Abraço

B

danferreir4:
Couta…

tenta usar o compareTo()

d.compareTo(ci.getNi() == 0)

Abraço

Vai dar na mesma.

marcosharbs

aplica o format na data do sistema operacional tb…

couta

é foi praticamente isso que fiz tbm e deu certo....
transformei minha String com a data do aniversario para Date, dpois peguei a data do SO formatei para "dd/MM/yyyy" transformei para String e trasnformei para Date dnovo, meio estranho neh... mas tem q ser assim mesmo haeuae
abraço e vlw galera

setNiver(JOptionPane.showInputDialog("Dia do seu Aniversario:\nEx:08/01/1987"));
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		try{
			setNi(sdf.parse(getNiver()));
		}catch (Exception e) {
			}
		System.out.println(sdf.format(getNi()));
	}
Date dd =new Date();  
		SimpleDateFormat sdf =new SimpleDateFormat("dd/MM/yyyy");
		String dd2= sdf.format(dd);
		Date d=null;
		try{
			d=sdf.parse(dd2);
		}catch (Exception e) {
			}
		String saida="Aniversariante\n";
		Cidadao ci=new Cidadao();
		for(int i=0;i<vec.size();i++){
			ci=(Cidadao)vec.get(i);
			if(d.compareTo(ci.getNi())==0){
				saida+=ci.toString()+"\n";
			}
			
		}
		
		JOptionPane.showMessageDialog(null,saida);
	}
Criado 8 de julho de 2009
Ultima resposta 8 de jul. de 2009
Respostas 6
Participantes 5