[RESOLVIDO]Problema em trabalhar com virada de meses e anos!

Boa tarde Prezados,

Estou precisando de uma ajuda para desenvolver um algoritmo, em que o usuário entra com o dia , mês , ano e uma quantidade de parcelas de uma determinada despesa, gostaria que nesse algoritmo fosse calculado as viradas de mês e ano dependendo da quantidade de parcelas, não sendo necessário tratar por enquanto as diferenças de dias entre meses. Será que alguém poderia me ajudar?. Ressaltando que não quero que ninguém faça um código para mim , somente possa de dar dicas.

O que é “virada de mês”? O último dia de cada mês?

O que você já fez até agora? Como está seu código atual?

Até agora só posso te indicar a classe Calendar para calcular as datas.

“Virada de mês” quer dizer que o valor da parcela será reajustado quando passar de dezembro/2012 para janeiro/2013?

Eu utilizo a biblioteca Calendar, que é ótima para manipulação de datas, diferente da Date, que tem muita coisa obsoleta. Tem uns que utilizam a Joda-Time, que provavelmente será o padrão do Java 8 e é bem completa.

Se você for utilizar a Calendar, dê uma olhada na documentação da API no site da Oracle, em especial o método Calendar.add() que faz operações de adição de dias, semanas, meses ou anos.

EX: janeiro/2012 compra parcelada em 12 vezes, data final janeiro 2013. andei prensando em fazer um for acrescentado +1 a cada mês que se passar e outro for acrescentando +1 ao ano a cada 12 meses.

Você precisa fazer algo como “cada boleto vence no dia 10 de cada mês, ou no primeiro dia útil depois do dia 10 se ele cair em um final de semana”?

Ao adicionar um mês a dezembro de 2012 será retornado janeiro de 2013, não precisar adicionar um ano nesses casos. Concentre-se em adicionar meses apenas.

Com Calendar, não precisa desta lógica. Basta utilizar o método add(Calendar.MONTH, i) dentro de um laço for onde o “i” é o contador.
Os anos serão incrementados automaticamente.

EX: janeiro/2012 compra parcelada em 12 vezes, data final janeiro 2013. andei prensando em fazer um for acrescentado +1 a cada mês que se passar e outro for acrescentando +1 ao ano a cada 12 meses. [/quote]

Muito melhor do que usar Calendar é usar a biblioteca JODA-Time:
http://joda-time.sourceforge.net/

[quote=JeffersonFelix]Com Calendar, não precisa desta lógica. Basta utilizar o método add(Calendar.MONTH, i) dentro de um laço for onde o “i” é o contador.
Os anos serão incrementados automaticamente.

EX: janeiro/2012 compra parcelada em 12 vezes, data final janeiro 2013. andei prensando em fazer um for acrescentado +1 a cada mês que se passar e outro for acrescentando +1 ao ano a cada 12 meses. [/quote][/quote]

Jefferson! dei uma pesquisa e vi que a biblioteca Calendar é uma ótima forma para se trabalhar com datas, mas meu problemas que estou trabalhando com inteiros, pois no aplicativo o usuário tem a opção de pesquisa por Mês/ano ou somente ano. Então decidi trabalhar separando os conteúdos da data em dias, meses e anos.

Bom, se você está fazendo cálculos de calendários “no braço”, já vou avisando que cálculos de calendários são muito chatinhos - para ter uma idéia, a própria Apple teve um bug desses em um programa do iPhone. Eu poderia aconselhar a converter o seu dado de dia, mês e ano para Joda-Time e usar as rotinas que estão prontas.

[quote=tallys][quote=JeffersonFelix]Com Calendar, não precisa desta lógica. Basta utilizar o método add(Calendar.MONTH, i) dentro de um laço for onde o “i” é o contador.
Os anos serão incrementados automaticamente.

EX: janeiro/2012 compra parcelada em 12 vezes, data final janeiro 2013. andei prensando em fazer um for acrescentado +1 a cada mês que se passar e outro for acrescentando +1 ao ano a cada 12 meses. [/quote][/quote]

Jefferson! dei uma pesquisa e vi que a biblioteca Calendar é uma ótima forma para se trabalhar com datas, mas meu problemas que estou trabalhando com inteiros, pois no aplicativo o usuário tem a opção de pesquisa por Mês/ano ou somente ano. Então decidi trabalhar separando os conteúdos da data em dias, meses e anos. [/quote]

Mas mesmo utilizando Calendar ou JODA-Time é perfeitamente possível fazer estes tipos de consultas. Pense no caso de migrar seus dados para tipos de data.

[quote=JeffersonFelix][quote=tallys][quote=JeffersonFelix]Com Calendar, não precisa desta lógica. Basta utilizar o método add(Calendar.MONTH, i) dentro de um laço for onde o “i” é o contador.
Os anos serão incrementados automaticamente.

EX: janeiro/2012 compra parcelada em 12 vezes, data final janeiro 2013. andei prensando em fazer um for acrescentado +1 a cada mês que se passar e outro for acrescentando +1 ao ano a cada 12 meses. [/quote][/quote]

Jefferson! dei uma pesquisa e vi que a biblioteca Calendar é uma ótima forma para se trabalhar com datas, mas meu problemas que estou trabalhando com inteiros, pois no aplicativo o usuário tem a opção de pesquisa por Mês/ano ou somente ano. Então decidi trabalhar separando os conteúdos da data em dias, meses e anos. [/quote]

Mas mesmo utilizando Calendar ou JODA-Time é perfeitamente possível fazer estes tipos de consultas. Pense no caso de migrar seus dados para tipos de data.[/quote]

você teria algum código de exemplo, para que eu possa analisar, e de repente migrar meus dados?

Olha, não tenho exemplos de códigos aqui, mas se der uma olhada na documentação da API, vai compreender como é o seu funcionamento.
Alguns acham a Calendar meio complicada, mas se for o caso, dê uma olhada na Joda-Time também. Não a conheço muito, mas dizem que tem um funcionamento mais simplificado.

Sobre a mudança, leve em consideração o que já foi falado pelo entanglement, hoje pode parecer simples para você trabalhar com datas “no braço”, mas uma hora ou outra seu sistema poderá exigir cálculos mais complexos com data, que certamente deixarão o trabalho mais chato e passível de erros.

O ideal mesmo é nunca reinventar a roda, e utilizar o que já existe pronto para isso.

Espero ter ajudado.