Comparando Datas - GregorianCalendar

3 respostas
J

moçada!
To em duvida no seguinte…tem um Código que é o seguinte…
se uma data inicial passada por parametro for igual a data de uma movimentação…essa movimentação será salva numa ArrayList.
isso tambem acontece se uma data final passada por parametro for igual a uma data da movimentação
as movimentações entre essas datas serao salvas tambem…
porem…quando no programa eu coloca a data INICIAL e a data FINAL sendo as mesmas…ele não salva

as datas são GregorianCalendar, eu já fiz os tratamentos sobre os Meses do gregorian…

aqui vai o código:

public ArrayList<Movimentaçao> getExtrato(GregorianCalendar inicio, GregorianCalendar fim){
		
		ArrayList<Movimentaçao> auxRetorno = new ArrayList<Movimentaçao>();
		Movimentaçao auxMov;
		GregorianCalendar dataMov, dataInicio = inicio, dataFim = fim;
		
		for(int i = 0; i < movimentaçoes.size(); i++){
			auxMov = movimentaçoes.get(i);
			dataMov	= auxMov.getDataMov();
			if ( ((dataMov.equals(dataInicio) || dataMov.after(dataInicio) ) & ( dataMov.before(dataFim) || dataMov.equals(dataFim) ) )){
				auxRetorno.add(auxMov);
			}
		}
		return (ArrayList<Movimentaçao>)auxRetorno;
	}

3 Respostas

N

um bom xute seria que o calendar tem a hora e tudo mais… se ele internamente compara o time milis isso nunca vai bater se vc tiver a mesma data com horas diferentes… seta as horas das datas para a mesma e então compara…

J

nextuser Valewzão!
creio q seja isso mesmo!
valew

D

Boa noite a todos.

A melhor maneira de voce resolver isto é converter para Date, e o método getTime() do GregorianCalendar faz exatamente isto, retorna um Date e depois converta-o para string através de um formatação da classe SimpleDateFormat, ao fazer isso voce elimina as horas.

public Integer compareDates(GregorianCalendar datainicio, GregorianCalendar datafim){
        try {
            SimpleDateFormat formatdata = new SimpleDateFormat("dd/MM/yyyy");
            Date dtinicio = datainicio.getTime();
            Date dtfim = datafim.getTime();
            String inicio = formatdata.format(dtinicio);
            String fim = formatdata.format(dtfim);
            dtinicio = formatdata.parse(inicio);
            dtfim = formatdata.parse(fim); 
            return dtinicio.compareTo(dtfim);
        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            return null;
        } 
}

O método acima vai retornar um Inteiro, se for -1 a data inicial e anterior a data final, se for 0 é iqual e se for 1, é posterior.

Repare que eu usei uma gambiarra, eu confesso, ou seja, eu converti para Date, depois para String e depois para Date de novo, quanto gambiarra, é verdade, porém funciona, ai voce vai perguntar, porque voce não parou no String e comparou a cadeia de caracteres :?: :?: :shock: :?: :?:

Simples, para poder utilizar o método compareTo da Classe Date, que também está na presente na Classe Calendar e consequentemente na Classe GregorianCalendar, e justamente esse método que retorna os inteiros acima descritos ao comparar as duas datas.

Criado 5 de maio de 2011
Ultima resposta 7 de mai. de 2011
Respostas 3
Participantes 3