Comparação de datas

Pessoal,

Por favor alguém poderia me ajudar a comparar a data do vencimento com a data atual para saber se o aluno terá que pagar multa por atraso no pagamento da mensalidade?

Criei o seguinte código:

Importei o java.util.Calendar mas continuo com problemas. Vamos ao código.

Criei o método abaixo para pegar a data do sistema:

private String DataAtual() { 
SimpleDateFormat formatter = new SimpleDateFormat(formato); 
String data = formatter.format(hoje); 
return data; 
} 

E no método calcular, que calcula o desconto de bolsa, caso o aluno a possua e a multa se já tiver passado o vencimento, coloquei o código que você postou:


DateFormat df = DateFormat.getInstance(); 
Data d1 = df.parse(data.getText()); 
Data d2 = df.parse(vencimento.getText()); 

Só que o netbeans sugeriu que eu circundasse com try e catch, então ficou assim:

try { d1 = df.parse(data); } catch (java.text.ParseException ex) { ex.printStackTrace(); } try { d2 = df.parse(vencimento); } catch (java.text.ParseException ex) { ex.printStackTrace(); }

Mais abaixo eu indiquei quem são data e vencimento:

vencimento = txtVencimento.getText(); 
data = txtData.getText(); 

E comparei para saber se tem multa ou não:

if (d1.compareTo(d2)>0){ 
multa = (valor * 10)/ 100; 
txtMulta.setText(String.valueOf(multa)); 
} else{ 
multa = 0; 
txtMulta.setText(String.valueOf(multa)); 
} 

O programa compila, mas na hora de executar, ele indica um erro na linha

d1 = df.parse(data); 

Vc pode me dizer se tem alguma coisa errada, ou se está faltando alguma coisa???

Após pagar, preciso também atualizar a data de vencimento no banco. Como faço esse SQL pessoal???

Por favor, me ajudem!!!

Obrigada.

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Carneiro[/color][/size] :joia:

Qual erro está gerando… certamente sua data não está no formato informado.

:okok:

update nomeDaTabela nomeDaColuna = novoValor

Gente, deixa eu explicar.

A variável no banco é String e os get e set também são String.

Então, essas duas variáveis String (vencimento e data) recebem o que vem do textField.

Código:

vencimento = txtVencimento.getText(); data = txtData.getText();

Depois eu converto essas variáveis para Date.

Código:

try { d1 = df.parse(data); } catch (java.text.ParseException ex) { ex.printStackTrace(); } try { d2 = df.parse(vencimento); } catch (java.text.ParseException ex) { ex.printStackTrace(); }

Código da conversão:

DateFormat df = DateFormat.getInstance(); Data d1 = df.parse(data.getText()); Data d2 = df.parse(vencimento.getText());

Utilizando um ou outro código dá erro na execução.

E faço a comparação:

Código:

if (d1.compareTo(d2)>0){ multa = (valor * 10)/ 100; txtMulta.setText(String.valueOf(multa)); } else{ multa = 0; txtMulta.setText(String.valueOf(multa)); }

O programa compila sem erros, mas na hora de executar ele não calcula e o netbeans acusa um erro na linha da comparação.

Acusa erro na linha da conversão de String para Date.

d1 = df.parse(data);

Se vcs puderem me ajudar eu agradeço muito, porque ainda preciso atualizar a data de vencimento do aluno assim que ele pagar a mensalidade. Ou seja, se o vencimento é 5/11/2007, tenho que atualizar que o próximo é dia 5/12/2007 e assim por diante.

Gente dependo disso para ser aprovada no meu Projeto Final na Faculdade!

Por favor, me ajudem!!!

Obrigada!

Por que tu não usa os métodos after e before ?

Pessoal,

Acho que descobri o erro que está dando…
Veja bem, ele cai numa exceção que diz:

public Date parse(String source) throws ParseException { ParsePosition pos = new ParsePosition(0); Date result = parse(source, pos); if (pos.index == 0) [b]throw new ParseException("Unparseable date: \"" + source + "\"" , pos.errorIndex);[/b] return result; }

e diz embaixo

Unparseble date.

Creio que seja porque o formato é com / (barra) e não com . (ponto).

Vocês sabem como resolver isso???

A data vem do sistema, e ele já está padronizado para utilizar a barra…

o erro apontado pelo netbeans é exatamente no momento da conversão para Date.

d1 = df.parse(data); d2 = df.parse(vencimento);

Por favor, me ajudem!!!

O tempo está terminando…

Grata

Ola Carla,

O problema pode ser no padrão que vc tá passando para o SimpleDateFormat, pode estar acontecendo que vc passa um padrão e a data tá com outro padrão… vou tentar exemplificar isto pra vc:

		String d = "25/12/2007";
		DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		Date date = format.parse(d);
		System.out.println("format = "+date);

Este exemplo roda direitim… mas se vc passar a data em outro padrão:

		String d = "25.12.2007";
		DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		Date date = format.parse(d);
		System.out.println("format = "+date);

Rola a exception:

Exception in thread "main" java.text.ParseException: Unparseable date: "25.12.2007"
	at java.text.DateFormat.parse(DateFormat.java:335)

Saca?

Ola,

Agora que vi que vc tá pegando a instancia do DateFormat atraves do metodo estático… como conselho eu diria pra vc não fazer isto… porque esta instancia vai depender da maquina que vc tá executando… e a sua data que vem do banco é um string com formato fixo… isto irá te dar uma dor de cabeça… instanceia um SimpleDateFormat que é mais garantido :wink:

Oi Bruno,

Muito obrigada pela sua ajuda. Já consegui converter a String para Date.

Mas se não for abusar muito da sua boa vontade, vc poderia me ajudar a comparar essas datas?

Acho que o código que coloquei para comparar e saber se há multa, não está sendo reconhecido.

[code]datapaga = txtVencimento.getText();
DateFormat format = new SimpleDateFormat(“dd/MM/yyyy”);
Date d1 = null;
try {
d1 = format.parse(datapaga);
} catch (java.text.ParseException ex) {
ex.printStackTrace();
}

    vencimento = txtVencimento.getText();
    Date d2 =  null;
    try {
        d2 = format.parse(vencimento);
    } catch (java.text.ParseException ex) {
        ex.printStackTrace();
    } [/code]

E utilizei esse código para comparar:

if (d1.after(d2)){ multa = (valor * 10) / 100; txtMulta.setText(String.valueOf(multa)); } else{ multa = 0; txtMulta.setText(String.valueOf(multa)); }

Depois disso, ainda tenho que atualizar a data de vencimento no banco. Vc pode me ajudar a fazer esse SQL. Quando eu falo em atualizar o vencimento, é para atualizar só o mês, e quando chegar no mês 12(dezembro) atualizar o ano.

Tem como fazer isso???

Valeu, muito obrigada e espero que vc possa continuar me ajudando.

:joia:

Ola,

Estamos aqui para ajudar :wink: .

Bom, o metodo que vc esta usando para ver se a data de pagto vem depois da data de vencimento é este mesmo… mas se não estiver dado certo, coloque uns System.out’s… ou execute em modo de debug, para ver onde pode estar o erro.

Em relação a atualizar o vencimento, eu conselho vc a usar a classe java.util.Calendar, ela tem um metodo add() que faz esta adição para vc, por exemplo:

Date hoje = new Date();//pega sempre a data de hoje.
Calendar c = Calendar.getInstance();//tb pega a data de hoje... mas só pra te mostrar como setar o date para o calendar.
c.setTime(hoje.getTime());
c.add(Calendar.MONTH, 1);//adiciona 1 mes a data atual, sendo que ja calcula se tiver que acontecer uma mudanã de ano e tals...
Date mesQueVem = c.getTime();//recupera o date..e dae vc ja consegue transformar para a sua string...