Verificações de datas... duvidas!

Seguinte, to fazendo um sistema que agenda uma manutenção, preciso que no evento agendar (com base na periodicidade do veiculo), ele verifique se: 1 - a data que sera calculada não resultara em um final de semana, e, 2- a data que sera calculada nao resultara em um dia que ja possui uma manutenção agendada…

eis os codigos que ja fiz até agora sem sucesso…

[code]
public void gera_Agendas(){

    VeiculoDAO dao = new VeiculoDAO();
    for (Veiculo veiculo: dao.listar()) { 
        Calendar c = Calendar.getInstance();
        c.add(Calendar.DAY_OF_MONTH,veiculo.getPeriodicidade().getPer_dias()); //pega a data de hoje e soma o valor da periodicidade
        Agenda_de_Manutencao_de_Veiculo age = new Agenda_de_Manutencao_de_Veiculo();
        Agenda_de_Manutencao_de_VeiculoDAO ageDAO = new Agenda_de_Manutencao_de_VeiculoDAO();
        
        this.verifica_fim_semana(c);
            JOptionPane.showInternalMessageDialog(null, data);
            age.setAge_man_vei_dia(data.getTime());


[/code]

    public void verifica_fim_semana(Calendar c){
        int i=0;
        if(c != Calendar.SATURDAY || c != Calendar.SUNDAY){
            i=0;            
        }
        if(c == Calendar.SATURDAY){
            i=2;
        }
        if(c == Calendar.SUNDAY){
            i=1;
        }
        c.add(0,i);
        this.verifica_outra_manutencao(c);    
    }
    public void verifica_outra_manutencao(Calendar c){
        Agenda_de_Manutencao_de_VeiculoDAO ageDAO = new Agenda_de_Manutencao_de_VeiculoDAO();
        for(Agenda_de_Manutencao_de_Veiculo agenda : ageDAO.listar()){
            if(agenda.getAge_man_vei_dia() == c){
            c.add(0,1);
            this.verifica_fim_semana(c);
            }
         data=c;
        }
    }

criei uma variavel publica, data, para gravar a data final que resultara dos “loops” de verificações…
tenho varias duvidas, tipo:

c.add(0,1);

serve para o que eu preciso, ou seja, pega a data atual e adiciona 1 dia a ela?
os erros que estão acontecendo (por enquanto) são as comparações dos ifs…

aguardo ajuda!

Utilize compare para comparar datas.

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

abs,

Evandro

Para dia da semana utilize

int diaSemana = calendar.get(Calendar.DAY_OF_WEEK);

if (diaSemana == Calendar.SATURDAY) {
}

ou até msm antes de gravar no banco perguntar se o campo agendado está nulo ou naum

Continuando, hehe

Para adicionar valores a data,


calendar.add(Calendar.DATE,1);

Onde Calendar.DATE é o campo a se adicionar, pode ser vários, como MINUTE, HOUR, SECOND.

dei uma mudada no codigo e a comparação ficou mais ou menos assim:

int dia_da_semana = c.get(Calendar.DAY_OF_WEEK);
if(dia_da_semana != Calendar.SATURDAY || dia_da_semana != Calendar.SUNDAY){
            i=0;            
}
...

e Evandro, no caso, para mim adicionar um dia a uma data ja setada, eu uso assim?

calendar.add(Calendar.DATE,1);

ou exemplificando
agendou para dia 23/10/2001
ai eu dou o comando acima e ele vai passar para

24/10/2011?

System.out.println(calendar);

:wink:

Ola pessoa, consegui resolver… usando o JODA Time… (muito bom por sinal)

segue o codigo resultante:

    public boolean gera_Agenda_Veiculo(){
        int cont=0;
        VeiculoDAO dao = new VeiculoDAO();
        for (Veiculo veiculo: dao.listar()) { 
            DateTime c = new DateTime();
            c=c.plusDays(veiculo.getPeriodicidade().getPer_dias());
            Agenda_de_Manutencao_de_Veiculo age = new Agenda_de_Manutencao_de_Veiculo();
            Agenda_de_Manutencao_de_VeiculoDAO ageDAO = new Agenda_de_Manutencao_de_VeiculoDAO();
            
            this.verifica_fim_semana(c);
            
            if(this.verifica_outra_manutencao_mesmo_veiculo(veiculo.getVei_cod())== true){
                age.setAge_man_vei_dia(data.toDate());
                age.setVeiculo(veiculo);
                Status status = new Status();
                status.setSta_cod(1);
                Prioridade pri = new Prioridade();
                pri.setPri_cod(1);
                age.setPrioridade(pri);
                age.setStatus((status));
                ageDAO.inserir(age);
                cont++;
            }
                data = null;
            }
                if(cont>0){
                    return true;
                }
                return false;
       }
    public void verifica_fim_semana(DateTime c){
        int i=0;
        int dia_da_semana = c.getDayOfWeek();
        if(dia_da_semana != 6  || dia_da_semana != 7){
            i=0;            
        }
        if(dia_da_semana == 6){
            i=2;
        }
        if(dia_da_semana == 7){
            i=1;
        }
        c=c.plusDays(i);
        this.verifica_outra_manutencao(c);    
    }
    public void verifica_outra_manutencao(DateTime c){
        Agenda_de_Manutencao_de_VeiculoDAO ageDAO = new Agenda_de_Manutencao_de_VeiculoDAO();
        SimpleDateFormat s = new SimpleDateFormat();
        String strdata1 = null;
        int dia=(c.getYear());
        int mes=(c.getMonthOfYear());
        int ano=(c.getDayOfMonth());
        strdata1 = (""+dia+mes+ano);
        int dat = Integer.parseInt(strdata1);
        for(Agenda_de_Manutencao_de_Veiculo agenda : ageDAO.listar()){
            DateTime data2 = new DateTime(agenda.getAge_man_vei_dia());
            int dia2=(data2.getYear());
            int mes2=(data2.getMonthOfYear());
            int ano2=(data2.getDayOfMonth());
            String strdata2 = (""+dia2+mes2+ano2);
            int dat2 = Integer.parseInt(strdata2);
            if(dat2 == dat){
            c=c.plusDays(1);
            this.verifica_fim_semana(c);
            break;
            }
            }
            data=c;
        }

[code]
public boolean verifica_outra_manutencao_mesmo_veiculo(int cod){
Agenda_de_Manutencao_de_VeiculoDAO ageDAO = new Agenda_de_Manutencao_de_VeiculoDAO();
for(Agenda_de_Manutencao_de_Veiculo agenda : ageDAO.listar()){
if(cod == agenda.getVeiculo().getVei_cod() && ( agenda.getStatus().getSta_cod()== 1 || agenda.getStatus().getSta_cod()== 2 )){
return false;
}

}
    return true;
}
[/code]

Bem, acredito que existam MUIIIIITAS partes que posso otimizar o codigo, se alguem puder me dizer quais e como… agradeço!!!