Estou com problema pra criar uma lógica pra calcular a próxima data de execução de uma determinada rotina do sistema.
Funciona assim, o usuário seleciona um ou mais dias da semana para a execução do processo.
Então por exemplo, o usuário seleciona quarta e quinta-feira, hoje é domingo dia 14/08, a próxima data de execução do processo seria quarta-feira dia 17/08.
Quando chagar quarta feira o sistema executa o processo, e recalcula a próxima data para execução do processo, que seria quinta-feira 18/08, e assim por diante.
GregorianCalendardatav=newGregorianCalendar();//data de emissaomesw–;datav.setLenient(false);datav.set(GregorianCalendar.YEAR,anow);//ano de emissaodatav.set(GregorianCalendar.MONTH,mesw);//mes de emissaodatav.set(GregorianCalendar.DATE,diaw);//dia de emissao
datav.add(GregorianCalendar.DATE,+25);//prazo 25 diasDatedatapw=datav.getTime();SimpleDateFormatf22=newSimpleDateFormat("dd-MM-yyyy");Stringvencw=f22.format(datapw);//data de vencimento
procure mais dicas conforme informado pelo colega acima … :idea:
Creio que não precise ficar calculando a proxima data, você só precisa saber se é uma quarta ou quinta
privatevoiddatas(){Calendarcal=Calendar.getInstance();intdia=cal.get(Calendar.DAY_OF_WEEK);if(dia==4||dia==5){// executa procedimentocal.add(Calendar.DAY_OF_MONTH,7);System.out.println("Proxima data de agendamento: "+cal.getTime());}}
S
softlesk
Anime, vlw a dica, este link me ajudou a entender melhor a class Calendar.
Lindberg, sua dica ja me ajudou a formatar a data para o retorno do método.
lucasportela, realmente foi um bom raciocínio, o problema é que tenho que mostra para o usuário quando será a próxima execução da rotina. se não fosse este detalhe realmente vc já tinha matado a charada.
Galera, o X da questão é:
Se o usuário marcar que deseja que a rotina seja executada todo o sábado, e hj é segunda, como calcular qual é a data do próximo sábado?? no caso seria (20/08/2011)
Já agradeço a ajuda de todos.
lucasportela
privatevoiddatas(){// dias da semana de agendamento ( dom,seg,sexta e ter)int[]diasAgendamento={1,2,6,3};// ordena o array em ordem crescenteArrays.sort(diasAgendamento);intultimoDia=diasAgendamento[diasAgendamento.length-1];// dia da semana da data atualCalendarcal=Calendar.getInstance();intdia=cal.get(Calendar.DAY_OF_WEEK);for(inti=0;i<diasAgendamento.length;i++){// Se for dia de agendamentoif(dia==diasAgendamento[i]){// executa procedimento// Calcula proxima dataif(dia==ultimoDia){cal.add(Calendar.DAY_OF_MONTH,(diasAgendamento[0]+7)-dia);}else{cal.add(Calendar.DAY_OF_MONTH,diasAgendamento[i+1]-dia);}System.out.println("Proxima data de agendamento: "+cal.getTime());}}}
S
softlesk
Opa lucas, vlw kra.
Com a ajuda deste seu código consegui montar meu método.