Comparar duas variáveis do tipo Calendar

Pessoal,

seguinte, preciso comprar duas variaveis do tipo calendar. Uma eu recebo do banco e a outra é a data atual.

estou fazendo assim, tenho uma data igual no banco e na hora de comparar as duas não funciona.

public String listar() throws Exception {
        Session session = HibernateUtil.getSession();

        Calendar dataAtual = Calendar.getInstance();

        eventoDao.setSession(session);
        eventos = new ArrayList<Evento>();
        List<Evento> eventos1 = eventoDao.list();

        for (Evento ev : eventos1){
            if ( ev.getDataFinal().equals(dataAtual)) {
                eventos.add(ev);
            }// verdade-data final > data atual?

        }

        return "listar";

    }
if ( ev.getDataFinal().compareTo(dataAtual)) 

Claro que não funciona - isso dá um erro de compilação. Veja:

http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html#compareTo(T)

para ver que compareTo retorna um valor que é zero se for igual, menor que zero se for menor, ou maior que zero se for maior.

1 curtida

Cuidado - as datas podem ser iguaizinhas em dias, meses e anos, mas não quanto a horas, minutos e segundos.
Escreva um método que pegue um Calendar, e retorne outro que fica com a hora = 1, minuto = 0, e segundo = 0. (Uso 1 em vez de 0 para a hora, por causa dos problemas de horário de verão. Usar hora = 1 evita esses problemas.)

Modifique para este código


 for (Evento ev : eventos1){  
             if ( ev.getDataFinal().compareTo(dataAtual) == 1) {  
                 eventos.add(ev);  
             }// verdade-data final > data atual?  
   
         }  

ev.getDataFinal().compareTo(dataAtual) for -1 a data final é menor que a data Atual
ev.getDataFinal().compareTo(dataAtual) for 0 a data final é igual a data Atual
ev.getDataFinal().compareTo(dataAtual) for 1 a data final é maior que a data Atual

O valor do if ( ev.getDataFinal().compareTo(dataAtual) == 1) , não sai de -1, não sei pq. O pior que tenho na base um valor q se adequa a essa comparação.
Alguém sabe pq ele n ta comparando?

[quote=thingol]Cuidado - as datas podem ser iguaizinhas em dias, meses e anos, mas não quanto a horas, minutos e segundos.
Escreva um método que pegue um Calendar, e retorne outro que fica com a hora = 1, minuto = 0, e segundo = 0. (Uso 1 em vez de 0 para a hora, por causa dos problemas de horário de verão. Usar hora = 1 evita esses problemas.)[/quote]

Pow cara… vc sumiu thingol!!

Mas então… se eu cirar um GregorianCalendar(1980,10,22) ele cria um objeto com essa data e o horario local por padrão… isso significa que se eu criar outro depois de 10 segundo com os mesmos parametros no construtor e compará-los com o compareTo() este será maior que aquele??

[]'s

consegui resolver…

public String listar() throws Exception {
        Session session = HibernateUtil.getSession();

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Calendar dataAtual = Calendar.getInstance();

        String dataAtualFormatada = sdf.format(dataAtual.getTime());

        eventoDao.setSession(session);
        eventos = new ArrayList<Evento>();
        List<Evento> eventos1 = eventoDao.list();

        for (Evento ev : eventos1) {
            String dataEventoFormatada = sdf.format(ev.getDataFinal().getTime());
            if (dataEventoFormatada.equals(dataAtualFormatada)) {
                eventos.add(ev);
            }
        }
        return "listar";

    }

Obrigado pela ajuda!