Calcular datas de vencimentos

Pessoal gostaria de saber se é possivel obter os vencimentos a partir do numero de parcelas e o dia de pagamento informados. Por exemplo:

número de parcelas: 6
dia de vencimento: 10

Resultado:
10/08/2012
10/09/2012
10/10/2012
10/11/2012
10/12/2012
10/01/2013

Sim.

Tem alguma dica, ou exemplo drsmachado?

Obrigado desde já

Use uma variável Calendar, existem métodos como o roll que permitem que você “ande” de uma data inicial até uma data final.

Porque é que quando se fala em adicionar na class Calendar toda a gente pensa no roll? O roll não muda os campos “acima”, ou seja fazer roll do mes, ao chegar a Dezembro passará para Janeiro do mesmo ano.
O que é pretendido é o método add.

Porque é que quando se fala em adicionar na class Calendar toda a gente pensa no roll? O roll não muda os campos “acima”, ou seja fazer roll do mes, ao chegar a Dezembro passará para Janeiro do mesmo ano.
O que é pretendido é o método add.[/quote]
Por que é que antes de criticar, não lês a mensagem por completo?
O que significa dizer “existem métodos como o roll”?
No meu modo de ver, significa “existe o roll, assim como outros métodos”.

Conseguiu entender ou prefere que eu desenhe?

Eu não critiquei, apenas constatei que muita gente pensa em roll quando se fala em adicionar dias /meses a datas. E expliquei porque é que deveria usar o add e não o roll.
Não vejo qualquer motivo para partir assim para o insulto fácil…

ALGUMAAAAS vezes gosto de jogar essa lógica pro SGBD. No caso do Oracle, por exemplo, ele trata isso com muita facilidade, já que qd vc soma uma constante numérica a um valor de data ele interpreta como “Quantidade de dias” ex:

Select sysdate as HOJE, sysdate + 10 as VENCIMENTO from dual.

Nesse caso vc já recebe a tupla com os registro da forma correta.

vlw

[quote=emanuelmm]ALGUMAAAAS vezes gosto de jogar essa lógica pro SGBD. No caso do Oracle, por exemplo, ele trata isso com muita facilidade, já que qd vc soma uma constante numérica a um valor de data ele interpreta como “Quantidade de dias” ex:

Select sysdate as HOJE, sysdate + 10 as VENCIMENTO from dual.

Nesse caso vc já recebe a tupla com os registro da forma correta.

vlw[/quote]
POBD (Programação Orientada a Banco de Dados)? Obrigado, mas depois de desenvolver um sistema completo com toda a lógica em Stored Procedures, eu posso afirmar que manter a lógica, na aplicação, é algo que, como diz a propaganda “não tem preço”.

No seu caso, a data de vencimento leva em conta que há feriados bancários e dias úteis (do tipo "se uma conta vence no dia 1/novembro, que é domingo, e dia 2/novembro é feriado, então a conta só vence na 3a., dia 3/novembro?
Ou então a data de vencimento é como a de impostos federais, onde a data de vencimento é antecipada para o último dia útil antes do dia normal de vencimento (por exemplo, se a conta vencer em 17/novembro (domingo), então em vez de você deixar o vencimento para o dia 18 / 11 (segunda) o imposto federal vence no último dia útil (que nesse caso seria 14/11, que é uma quinta-feira, já que 15/11 é um feriado?)
Ou é uma data de vencimento fixa (como as de cartões de crédito) - só que você cobra 2 dias de juros mesmo que o vencimento seja em um sábado e a pessoa só pague na 2a. feira?

[quote=drsmachado]
POBD (Programação Orientada a Banco de Dados)? Obrigado, mas depois de desenvolver um sistema completo com toda a lógica em Stored Procedures, eu posso afirmar que manter a lógica, na aplicação, é algo que, como diz a propaganda “não tem preço”.[/quote]

Acho q usar um recurso do ORACLE não é POBD. Tudo tem q ser usado com cuidado. “Remédio em excesso é veneno”, acho q foi o seu caso ai com o lance das SP. Eu fiz questao de destacar o ALGUMAAASS, mas ainda assim nao deu pra entender. rsrsrs

Só outro detalhe, quando falei “essa lógica”, me referi especificamente ao calculo do vencimento, q usamos bastante aqui para gerar boletos a clientes. Gosto de já trazer o vencimento com o valor correto na tupla de dados.

espero ter ajudado.

vlw

[quote=emanuelmm]Só outro detalhe, quando falei “essa lógica”, me referi especificamente ao calculo do vencimento, q usamos bastante aqui para gerar boletos a clientes. Gosto de já trazer o vencimento com o valor correto na tupla de dados.

espero ter ajudado.

vlw[/quote]
Eu entendi perfeitamente o que você quis dizer, expus a minha opinião e, como tal, diz respeito apenas ao que eu penso, correto?
Não é apenas o Oracle que possui este recurso, o java provê nativamente, através da classe calendar e, se pegarmos um terceiro, como o JodaTime ou algum outro, podemos até identificar se a data de vencimento é fim de semana, por exemplo.

Concordo com sua opnião e só dei a minha, acho q vc nao entendeu.

O que disse foi que as VEZES prefiro fazer o calculo do vencimento no sql, pois no caso do Oracle, basta fazer SELECT DATA + DIASAPAGAR AS VENCIMENTO FROM TABELA.
O que, na minha opniao, é muitas vezes mais fácil do que usar a classe Calendar ou outras solucoes possíveis. Simples assim, apenas uma opniao.

Nunca disse que é massa jogar lógica toda pra dentro SGBD, nunca disse que SOMENTE O ORACLE tem essa funcionalidade, so comentei q as vezes gosto de jogar esse calculo pra dentro do sql. =)

O problema de tomar tal atitude (colocar algo para o banco, independente do que seja) é que perdemos a liberdade da aplicação.
É o mesmo que usar alto acoplamento. A dependência gerada é péssima.
No projeto em que estou atualmente nós temos este problema.
A aplicação roda com oracle e o DBA encheu de SPs que fazem uma mágica com muita coisa. O problema disso é que agora (uns 3 anos para cá) a empresa está implementando SAP e usa a base do sistema atual como parte da análise para adequação das regras de negócios.
Não estou dizendo que toda empresa migrará para SAP, mas pode haver necessidade de alterar o banco de dados.
É apenas por isto que estou argumentando contra.

Amigo, vou te explicar novamente…

Nao to falando pra ninguem criar SP, nem nada do tipo. O que estou falando é que para o caso do vencimento, gosto de já trazer calculado. Veja o exemplo do boleto:

Você vai gerar um boleto pro cliente ok? Daí você vai montar uma cláusula SQL pra trazer os dados do BOLETO. Tipo, Dados do cliente, Numero da Nota, Dada da Fatura e etc e tal. O que to falando é que nesses casos, eu já trago tb a data de vencimento junto. Nao vou no banco só calcular essa data, nem vou criar SP.

Entendo sua visao, a ideia nao é gerar acoplamento, nem nenhum tipo de code smell, a ideia é aproveitar o SQL q traz os dados, no caso do exemplo, os dados do boleto onde virá a data da fatura, e já trazer tb a data de vencimento.

Só =)

[]s

Estou entando resolver via código, mas não consegui chegar ao resultado desejado com o método roll. Eu preciso obter os vencimentos, pois se haver 5 parcelas, será inserido 5 registros em minha tabela no BD.

[quote=pmlm]O roll não muda os campos “acima”, ou seja fazer roll do mes, ao chegar a Dezembro passará para Janeiro do mesmo ano.
O que é pretendido é o método add.[/quote]

[quote=Paezani]Pessoal gostaria de saber se é possivel obter os vencimentos a partir do numero de parcelas e o dia de pagamento informados. Por exemplo:

número de parcelas: 6
dia de vencimento: 10

Resultado:
10/08/2012
10/09/2012
10/10/2012
10/11/2012
10/12/2012
10/01/2013[/quote]

Paezani, use o método add cara. Leia a api. Sempre! http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html

Aos demais, em relação ao roll, parece que ele não atualiza o ano quando “a rolagem” de meses passa de dezembro, correto?

Em relação a cálculos diretamente no banco de dados, imho, não faria. Fica mais difícil de manter e perde a independência de banco.