Problema com Date

3 respostas
T

Galera to com um pequeno problema em um método que me retorna um ArrayList de Dates;

É o seguinte:
Esse método vai me retornar as datas mês a mês para gerar as parcelas de uma compra.

O problema é que quando a data passa de dezembro e vai para o próximo ano, janeiro vem normal mas o valor para fevereiro salta para março.

Ta ai o código:

private ArrayList<Date> dataDasParcelas(int diaVencimento, int numParcelas){
        
        boolean aux = true;
        int auxMes = 0;
        int vencimento = diaVencimento;
        Date data = new Date();
        data.setMonth(data.getMonth()+1);
        for(int i=1; i<=numParcelas; i++){
            auxMes = data.getMonth();
            diaVencimento = vencimento;
            if (diaVencimento == 31) {
                switch (data.getMonth()){
                    case 1: diaVencimento=28;
                    break;
                    case 3: diaVencimento=30;
                    break;
                    case 5: diaVencimento=30;
                    break;
                    case 8: diaVencimento=30;
                    break;
                    case 10: diaVencimento=30;
                    break;
                } 
            }
            if(diaVencimento == 29 || diaVencimento == 30){
                switch (data.getMonth()){
                    case 1: diaVencimento=28;
                    break;
               } 
            }
            
            Date date = new Date(data.getYear(), data.getMonth(), diaVencimento);
            
            
            this.datas.add(date);
                       
            if(data.getMonth()==11){
                data.setYear(data.getYear()+1);
                data.setDate(data.getDate());
                data.setMonth(0);
                aux = false;
            }
            
            
            if (aux)
            data.setMonth(auxMes+1);
            else{
                aux = true;
            }
        }

Valeu galera.
Fiquem com DEUS!

3 Respostas

J

Dei uma melhorada no seu código, veja se serve:

private List<Date> dataDasParcelas(int diaVencimento, int numParcelas){
   List<Date> datas = new ArrayList<Date>();
        
   Calendar cal = GregorianCalendar.getInstance();
		
   for(int i = 0; i<numParcelas; i++){
      cal.set(Calendar.DAY_OF_MONTH, 1);
      cal.add(Calendar.MONTH, 1);
			
      int max = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
      int dia = diaVencimento > max?max:diaVencimento;
      cal.set(Calendar.DAY_OF_MONTH, dia);
			
      datas.add(cal.getTime());
   }
		
   return datas;
}
D

Realmente é muito mais fácil, e correto
usa a classe Calendar para tratar das datas…

G

Recomendo a seguinte leitura: http://www.onjava.com/pub/a/onjava/2003/06/05/java_calendar.html

Criado 30 de julho de 2008
Ultima resposta 4 de ago. de 2008
Respostas 3
Participantes 4