Acrescentar dias em uma data

Olá colegas,

Sou novo no fórum, iniciante em Java e tenho um dúvida (um não, muitas. Mas vamos por partes kkk).

É o seguinte, estou criando um sistema em java para a empresa onde eu trabalho e uma das funções do sistema e controlar os pagamentos de mensalidades, por isso, juntamente com as informações do cliente cadastramos também quantas parcelas o mesmo pagará, bem como valor, vencimento, etc… e o meu problema está justamente na data de vencimento das parcelas. A ideia é que o usuário do sistema defina a data do primeiro vencimento e o sistema gera os vencimentos correspondentes a todas as parcelas.

Já consegui gerar um vencimento para cada parcela, porém o dia não fica certo, porque eu acrescentei 30 dias sobre o vencimento da primeira parcela, então, se por exemplo, o vencimento da primeira parcela for 15/05/2012 a segunda fica com vencimento em 14/06/2012, em função dos meses alternarem entre 30 e 31 dias. Ou seja, eu preciso achar uma forma de fazer com que o dia fique sempre o mesmo, incrementando apenas o mês e que não dê nenhum problema com anos bissextos.

Se alguém me der uma luz eu agradeço

Aprenda a usar a Classe Calendar da API java. Lá tem muita coisa para te ajudar nas operações com datas.

Da uma olhada nessa classe, ela pode ajudar a implementar a sua.
http://code.google.com/p/rockframework/source/browse/trunk/rockframework-core/src/main/java/br/net/woodstock/rockframework/util/DateBuilder.java

Vc vai precisar usar o método roll da classe Calendar.

Calendar c = Calendar.getInstance(); c.roll(Calendar.MONTH, true); // Incrementa o mês

Mas sobre o que disse sobre o dia ser sempre o mesmo isso não vai ser possível, imagine um vencimento no dia 30 ou 31.

Incrementa um dia na data atual

data.setTime(data.getTime() + TimeUnit.DAYS.toMillis(1));

[quote=lsjunior]Da uma olhada nessa classe, ela pode ajudar a implementar a sua.
http://code.google.com/p/rockframework/source/browse/trunk/rockframework-core/src/main/java/br/net/woodstock/rockframework/util/DateBuilder.java

Vc vai precisar usar o método roll da classe Calendar.

Calendar c = Calendar.getInstance(); c.roll(Calendar.MONTH, true); // Incrementa o mês

Mas sobre o que disse sobre o dia ser sempre o mesmo isso não vai ser possível, imagine um vencimento no dia 30 ou 31.

[/quote]

Em vez de roll, deve usar o add senão ao chegar a Dezembro irá passar para Janeiro do mesmo ano.

Então… usando o método roll funciona da forma que eu preciso, se for definido dia 31 em um vencimento todos, no mês seguinte será dia 30, e o nos seguintes 30 novamente.

Por exemplo, ano que vem fevereiro terá 28 dias, usando o roll, se o vencimento da uma parcela anterior à fevereiro foi dia 29, 30 ou 31, todos os vencimento depois de fevereiro serão todos no dia 28.

Não sei se deu pra entender dessa forma, mas é +/- o que acontece. Até tentei fazer umas gambiarras, mas nada funcionou :confused:

Outro problema: usando o roll do Calendar não incrementa o ano, quando chega em dezembro volta pra janeiro do mesmo ano.

Alguém?

Coloquei em anexo uma classe data que minha professora desenvolveu para usarmos no trabalho dela, tem algumas funções como checar se o ano é bissexto, vê se o mês tem 30 ou 31 dias, vê se a data é válida e inclusive uma onde você pode contar quantos dias tem de uma data a outra, por exemplo: “10/05/2000” - > “15/05/2000”, ele irá retornar esses cinco dias de diferença. Espero que te ajude.

Muito Obrigado :smiley:

Oi, boa tarde!

É só usar “.add” ao invés do “.roll”:

			Calendar cal = Calendar.getInstance();
			cal.add(Calendar.DAY_OF_MONTH, 1);

Abraço,

Eu às vezes tenho mesmo a sensação de ser invisível…

Há um mês atrás eu escrevi:

E hoje ele vem perguntar isto?

[quote=pmlm]Eu às vezes tenho mesmo a sensação de ser invisível…

Há um mês atrás eu escrevi:

E hoje ele vem perguntar isto?

Funcionou perfeitamente. Obrigado.

Desculpe se eu feri seus sentimentos. Não tinha visto sua postagem :slight_smile:

É que eu já tinha respondido muito antes de perguntares… :slight_smile: