[RESOLVIDO]Problema em trabalhar com virada de meses e anos!
15 respostas
T
tallys
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?
Hebert_Coelho
O que você já fez até agora? Como está seu código atual?
Ivan_Alves
Até agora só posso te indicar a classe Calendar para calcular as datas.
E
entanglement
“Virada de mês” quer dizer que o valor da parcela será reajustado quando passar de dezembro/2012 para janeiro/2013?
JeffersonFelix
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.
T
tallys
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.
E
entanglement
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”?
Jhonny_Oliveira
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.
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.
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.
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.
E
entanglement
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.
JeffersonFelix
tallys:
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.
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.
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.
T
tallys
JeffersonFelix:
tallys:
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.
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.
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.
você teria algum código de exemplo, para que eu possa analisar, e de repente migrar meus dados?
JeffersonFelix
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.