Calculando Próxima Data [Resolvido]

9 respostas
S

Eia galera, blz?

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.

como ficaria esta rotina?

vlw galera.

9 Respostas

Mephy

grava isso em Date ou Calendar (java.util) e usa o método after() (ou o before())

S

opa Mephy, blz!!

eu to ligado destes métodos, mas o problema tá em montar a lógica... pode parecer bem simples, mas pra mim tem sido um carma...

olha o que cheguei a fazer, mas ta dando um erro. Alem disso não sei se a lógica está certa.

public String CalculatesNextDate(String daysOfweek) {//O parametro é uma string com o numero dos dias da semana separados por ponto-e-virgula
        Calendar data = Calendar.getInstance();
        String[] s = daysOfweek.split(";");
        Calendar menorData=Calendar.getInstance();// a menor data é a data da próxima execução da rotina
        
        menorData.add(Calendar.DATE, 30); adiciono 30 dias, por que se não a menor data será a data atual
        for(String a:s){
            int dia=Integer.parseInt(a);// converto o numero do dia da semana em int
            data.add(Calendar.DATE, (dia+7)-Calendar.DAY_OF_WEEK);            
            if((data.after(Calendar.getInstance()))&&(data.before(menorData))){
                menorData=data;
            }
            data=Calendar.getInstance();
        }
        JOptionPane.showMessageDialog(null, menorData);
        return menorData.toString();
    }

Alguém tem uma dica??
vlw!!

Lindberg

da uma olhada neste e ver se ajuda.

GregorianCalendar datav = new GregorianCalendar(); //data de emissao

mesw;

datav.setLenient(false);

datav.set(GregorianCalendar.YEAR, anow);       //ano de emissao

datav.set(GregorianCalendar.MONTH, mesw);    //mes de emissao

datav.set(GregorianCalendar.DATE, diaw );       //dia de emissao
datav.add(GregorianCalendar.DATE, + 25);      //prazo 25 dias
Date datapw = datav.getTime();

SimpleDateFormat f22 = new SimpleDateFormat("dd-MM-yyyy");
String vencw = f22.format( datapw );              //data de vencimento

procure mais dicas conforme informado pelo colega acima … :idea:

Anime

http://camilolopes.wordpress.com/2008/05/05/usando-datas/

lucasportela

Minha sugestão:

Creio que não precise ficar calculando a proxima data, você só precisa saber se é uma quarta ou quinta

private void datas() {
    Calendar cal = Calendar.getInstance();
    int dia = cal.get(Calendar.DAY_OF_WEEK);
    if(dia == 4 || dia == 5) {
        // executa procedimento
        cal.add(Calendar.DAY_OF_MONTH, 7);
        System.out.println("Proxima data de agendamento: " + cal.getTime());
    }
}
S

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
private void datas() {
        // dias da semana de agendamento ( dom,seg,sexta e ter)
        int[] diasAgendamento = {1,2,6,3};
        // ordena o array em ordem crescente
        Arrays.sort(diasAgendamento);
        int ultimoDia = diasAgendamento[diasAgendamento.length - 1];
        // dia da semana da data atual
        Calendar cal = Calendar.getInstance();
        int dia = cal.get(Calendar.DAY_OF_WEEK);
        
        
        for (int i = 0 ; i < diasAgendamento.length; i++) {
            // Se for dia de agendamento
            if(dia == diasAgendamento[i]) {
                // executa procedimento
                // Calcula proxima data
                if(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

Opa lucas, vlw kra.

Com a ajuda deste seu código consegui montar meu método.

Obrigado a todos!!

lucasportela

coloque o topico como resolvido, por gentileza

Criado 14 de agosto de 2011
Ultima resposta 15 de ago. de 2011
Respostas 9
Participantes 5