Programa usando New Date(), porem verificando finais de semana
8 respostas
A
Adamgnr
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??
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.
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.
GregorianCalendaraluguel=newGregorianCalendar();GregorianCalendardevolucao=newGregorianCalendar();for(inti=1;i<=31;i++){//Isso aqui é só pra testar com todos os dias do mêsaluguel.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 devolverif(devolucao.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.SUNDAY){//Verifica se é domingodevolucao.add(GregorianCalendar.DAY_OF_MONTH,1);//Se for domingo aumenta 1 dia na devolução}System.out.println("Alugado em: "+newSimpleDateFormat("dd/MM/yyyy (E)").format(aluguel.getTime()));System.out.println("Deve ser devolvido em: "+newSimpleDateFormat("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
Adamgnr
Obrigado galera, logo testarei essas dias
A
Adamgnr
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.
GregorianCalendaraluguel=newGregorianCalendar();GregorianCalendardevolucao=newGregorianCalendar();for(inti=1;i<=31;i++){//Isso aqui é só pra testar com todos os dias do mêsaluguel.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 devolverif(devolucao.get(GregorianCalendar.DAY_OF_WEEK)==GregorianCalendar.SUNDAY){//Verifica se é domingodevolucao.add(GregorianCalendar.DAY_OF_MONTH,1);//Se for domingo aumenta 1 dia na devolução}System.out.println("Alugado em: "+newSimpleDateFormat("dd/MM/yyyy (E)").format(aluguel.getTime()));System.out.println("Deve ser devolvido em: "+newSimpleDateFormat("dd/MM/yyyy (E)").format(devolucao.getTime()));}
a seguinte parte aqui
for(inti=1;i<=31;i++){//Isso aqui é só pra testar com todos os dias do mêsaluguel.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
Adamgnr
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
Adamgnr
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!!!)