Programa usando New Date(), porem verificando finais de semana

8 respostas
A

Estou fazendo um programa em java e mysql de uma locadora de filmes (para a faculdade) e como toda locadora tem a data de locação e de entrega de filmes.Meu programa já possúi a data que está no computador(Usando o Data date = New Data(); ) , porem agora tem um problema que eu gostaria de verificar.
Ex.: O usuario seleciona um filme, e tem o prazo de 2 dias pra entrega, só que essa entrega cái no Domingo, então a entrega teria que ser para a segunda, como que eu faço para o sistema fazer essa verificação e modificar automaticamente no sistema??

Agradecido desde já,
Adam Paulo

8 Respostas

P

Olá,
Se você usar o java.util.Calendar em vez do Date você pode ver qual dia da semana aquela data corresponde daí então se for sábado ou domingo você incrementa a data.
O Calendar tem algumas constantes que te dão mais informações sobre a data em questão, como o dia, mês do ano, etc.

drsmachado
Date dt = new Date();
        Date ds = dt;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
        SimpleDateFormat dds = new SimpleDateFormat("EEEE");
        String diadasemana = dds.format(dt);

Testa isso…

N

Eu fiz aqui um código e eu acho que deve resolver seu problema, você pode separar o código em métodos para ficar mais organizado.

GregorianCalendar aluguel = new GregorianCalendar();
        GregorianCalendar devolucao = new GregorianCalendar();
        
        for (int i=1;i<=31;i++){ //Isso aqui é só pra testar com todos os dias do mês
        aluguel.set(2011, GregorianCalendar.MAY, i);        
        devolucao.setTime(aluguel.getTime());
        devolucao.add(GregorianCalendar.DAY_OF_MONTH, 2);  //Aqui 2 representa quantos dias o cara tem pra devolver
        if (devolucao.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.SUNDAY) { //Verifica se é domingo
        devolucao.add(GregorianCalendar.DAY_OF_MONTH, 1); //Se for domingo aumenta 1 dia na devolução
        }
        System.out.println("Alugado em: "+new SimpleDateFormat("dd/MM/yyyy (E)").format(aluguel.getTime()));
        System.out.println("Deve ser devolvido em: "+new SimpleDateFormat("dd/MM/yyyy (E)").format(devolucao.getTime()));
        }
drsmachado

Apenas complementando:

O SimpleDateFormat permite que a Date seja representada “mais visualmente”
Alguns “trunfos”:
dd = dia do mês
mm = mês
yyyy = ano com 4 dígitos
yy = ano com 2 dígitos
EEEE = dia da semana (completo, respeitando o Locale em que se está rodando a aplicação)
EE = dia da semana com três letras (respeitando o Locale)
HH = horas
MM = minutos
ss = (minúsculos) segundos
SSSS = (maiúsculos) milissegundos

E tem mais…

A

Obrigado galera, logo testarei essas dias :slight_smile:

A
nephestos:
Eu fiz aqui um código e eu acho que deve resolver seu problema, você pode separar o código em métodos para ficar mais organizado.
GregorianCalendar aluguel = new GregorianCalendar();
        GregorianCalendar devolucao = new GregorianCalendar();
        
        for (int i=1;i<=31;i++){ //Isso aqui é só pra testar com todos os dias do mês
        aluguel.set(2011, GregorianCalendar.MAY, i);        
        devolucao.setTime(aluguel.getTime());
        devolucao.add(GregorianCalendar.DAY_OF_MONTH, 2);  //Aqui 2 representa quantos dias o cara tem pra devolver
        if (devolucao.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.SUNDAY) { //Verifica se é domingo
        devolucao.add(GregorianCalendar.DAY_OF_MONTH, 1); //Se for domingo aumenta 1 dia na devolução
        }
        System.out.println("Alugado em: "+new SimpleDateFormat("dd/MM/yyyy (E)").format(aluguel.getTime()));
        System.out.println("Deve ser devolvido em: "+new SimpleDateFormat("dd/MM/yyyy (E)").format(devolucao.getTime()));
        }
a seguinte parte aqui
for (int i=1;i<=31;i++){ //Isso aqui é só pra testar com todos os dias do mês
        aluguel.set(2011, GregorianCalendar.MAY, i);        
        devolucao.setTime(aluguel.getTime());
eu estou denifindo em setTime a data atual do computador mesmo??? ou a parte do aluguel.set(2011......); que está setando a data??? no caso se eu já tiver um método que mostra a data do computador eu poderia colocar no aluguel? algo como
aluguel.set(jTextFielDataFormadata); // no caso esse jTextField já tem a codificação da data do computador
A

Fiz o seguinte codigo, mudei a data a ser “pulada” para “Quarta feira” e descobri que o código para add mais 1 dia nao funcionou
CODIGO ABAIXO

GregorianCalendar aluguel = new GregorianCalendar(); GregorianCalendar devolucao = new GregorianCalendar(); for(int i=1;i<=31;i++){ Date d = new Date() SimpleDataFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); aluguel.setTime(d); devolucao.setTime(aluguel.getTime()); devolucao.add(GregorianCalendar.DAY_OF_MONTH,2); if(devolucao.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.WEDNESDAY){ devolucao.add(GregorianCalendar.DAY_OF_MONTH,1); } } jFDadaEntrega.setText(sdf.format(devolucao.getTime()).toString());

Bem o codigo funciona todo perfeitamente, ele coloca os dois dias depois da data atual, porem a parte de ver se o dia é “quarta-feira” adicionar mais um dia, como fazer agora?

A

PAREM TUDO! descobri que o problema nao era o CODIGO
e sim MINHA CABEÇA!!!
para a data avançar mais uma eu teria que colocar SEXTA FEIRA! (ja que hoje é quarta, e dois dias depois que teria que ser o dia da semana a ser pulado!!!)

Jah resolvi tudo aqui, OBRIGADO GALERA :smiley:

Criado 26 de maio de 2011
Ultima resposta 1 de jun. de 2011
Respostas 8
Participantes 4