Comparacao de datas - relatorio por periodo

Pessoal, nao estou conseguindo fazer funcionar.

Explico:
quero gerar um relatorio onde minha data final seja a data corrente(hoje) e a data inicial seja informada pelo usuario. Para a geração de relatorio a data inicial deve estar dentro do prazo de 180 dias decrescendo da data corrente.

Procurei em outros topicos, montei esse escopo… porem nao estou conseguindo termina-lo.

Se alguem puder me dar um help, fico muito grata.

if (modo.equals(“2”)) { //extrato por periodo

                        /**Obtem a data do dia*/
                        SimpleDateFormat formataData    = new SimpleDateFormat("dd/MM/yyyy");
                        dataFinal=(formataData.format(new Date()));

                        /**Data calculada - nao pode ultrapassar o maximo de 180 dias decorrente da data final*/
                        int qtdDias  = 180;
                        Calendar calendar  = Calendar.getInstance();
                        calendar.setTime(new Date());
                        calendar.add(Calendar.DATE, -qtdDias);
                        String data=( formataData.format(calendar.getTime()));
                        //System.out.println(data);

//

                        /**Verificando se a data informada está correta*/
                        
                        Calendar dtini = new GregorianCalendar();
                        dtini.setTime(formataData.parse(dataInicial));
                        Calendar dtfim = new GregorianCalendar();
                        dtfim.setTime(formataData.parse(dataFinal));
                        Calendar dtlimite = new GregorianCalendar();
                        dtlimite.setTime(formataData.parse(data));
                        
                   
                        
        //   Verificando intervalo
       
                        if (!((dtlimite.before(dtini) && dtini.before(dtfim)) || (dtlimite.before(dtini)) && (dtini.equals(dtfim)))){
                            
                            throw new BCException("Data informada inferior ao prazo de 180 dias");
                            
                  
                        }
                    
                       }

qual é o problema do seu código?

Porque voce nao faz as contas com milissegundos mesmo?

pega os milissegundos de hoje, subtrai o numero de milissegundos correspondentes a 180 dias, e verifica se é maior ou nao a data informada.

O método não está retornando resultados consistentes? Eu verifiquei o código e acho que a lógica poderia algo parecido com isso:

//...

if (dtini.before(dtfim) || dtini.equals(dtfim)) { // verifica se a Dt. inicial é mais antiga ou igual à Dt. final

    if (dtini.after(dtlimite) || (dtini.equals(dtlimite))) { // verifica se a Dt. inicial é mais recente ou igual à Dt. limite
        // Gerar o relatório
    } else {
        throw new BCException("A data informada não deve ser inferior ao prazo de 180 dias"); 
    }

} else {
     throw new BCException("A data informada não deve ser posterior à data atual"); 
}

//...

Detalhe: tente, quando houver várias condições, usar em ifs separados. Várias condições ligadas por || e && podem tornar a leitura do código confusa.

Espero ter ajudado.

OBRIGADA PELAS RESPOSTAS…

ESTAREI TESTANDO, E INFORMO SE DEU CERTO…

BOA SEXTA A TODOS