Ajuda - Manipular datas com GregorianCalendar

0 respostas
R

Por favor, quem pode me ajudar? De antemão, muito obrigado.

Sou principiante em Java estou montando um vetor com feriados fixos do Brasil a partir de 1980 até 2060 usando a classe GregorianCalendar, ou seja, preciso de um vetor que contenha todos os feriados fixos, ex.: 01-jan-1980, 21-abr-1980, 01-mai-1980, ... 25-dez-1980, ... 01-jan-2060, 21-abr-2060, ... 25-dez-2060.

Para obter estes dados, manipulei as datas através de um looping e os resultados armazenados em todo o vetor criado referem-se ao último ano obtido, ou seja, fica uma quantidade enorme de registro apenas com os feriados de 2060 e assim, compromete todo o resultado.

Por tratar-se de variáveis ?static?, o vetor criado assume a identidade referente ao vetor auxiliar que criei para acrescentar anos, sendo que este no último estágio do looping tem o ano de 2060. Ao retirar a declaração ?static?, o vetor auxiliar não é criado.

O resultado do programa abaixo mostra que não consegui obter as diferentes datas no vetor de armazenamento, chamado ferFix:

// FazFeriadoFixo.java
import java.util.GregorianCalendar;

public class FazFeriadoFixo
{   
   private static GregorianCalendar[] ferFix = new GregorianCalendar[642];
   private static GregorianCalendar[] feriadofixo = new GregorianCalendar[9];
  
   public static void main( String[] args )
   {     
       /*  #### feriados fixos desde o ano 1980 até o ano 2060  ### 
        e que não sejam sábados e domingos #####   */
       
       feriadofixo[1] = new GregorianCalendar(1979, 0, 1);
       feriadofixo[2] = new GregorianCalendar(1979, 3, 21);
       feriadofixo[3] = new GregorianCalendar(1979, 4, 1); 
       feriadofixo[4] = new GregorianCalendar(1979, 8, 7);
       feriadofixo[5] = new GregorianCalendar(1979, 9, 12);
       feriadofixo[6] = new GregorianCalendar(1979, 10, 2); 
       feriadofixo[7] = new GregorianCalendar(1979, 10, 15); 
       feriadofixo[8] = new GregorianCalendar(1979, 11, 25);

       int cont = 0;
       int ctd;
       int ano = 1979;
       int weekDay;
       
        while (ano < 2060)
           {
        for(ctd = 1; ctd < 9; ctd++)
        {
           feriadofixo[ctd].add(feriadofixo[ctd].YEAR,1);
           
           weekDay = feriadofixo[ctd].get(feriadofixo[ctd].DAY_OF_WEEK); 
           ano = feriadofixo[ctd].get(feriadofixo[ctd].YEAR);
           
           if ( (weekDay > 1) && (weekDay < 7) && (ano < 2100) )
           {
               cont ++;
               ferFix[cont] = feriadofixo[ctd];
           }  // fim de if         
          
        } // fim de for
    }// fim de while

        for (ctd = 1; ctd < 19;ctd++)   
        {           
          System.out.printf( "A data de ferFix agora eh : \n%tc%s%d\n\n", ferFix[ctd], " ", ctd);               
        }    
   }  // fim de main
}  // fim da classe FazFeriadoFixo


O resultado é:

A data de ferFix agora eh :
Qui Jan 01 00:00:00 BRST 2060   -  o nr do registro eh:  1

A data de ferFix agora eh :
Qua Abr 21 00:00:00 BRT 2060   -  o nr do registro eh:  2

A data de ferFix agora eh :
Sßb Mai 01 00:00:00 BRT 2060   -  o nr do registro eh:  3

A data de ferFix agora eh :
Sßb Dez 25 00:00:00 BRST 2060   -  o nr do registro eh:  4

A data de ferFix agora eh :
Qui Jan 01 00:00:00 BRST 2060   -  o nr do registro eh:  5

A data de ferFix agora eh :
Qua Abr 21 00:00:00 BRT 2060   -  o nr do registro eh:  6

A data de ferFix agora eh :
Sßb Mai 01 00:00:00 BRT 2060   -  o nr do registro eh:  7

A data de ferFix agora eh :
Ter Set 07 00:00:00 BRT 2060   -  o nr do registro eh:  8

A data de ferFix agora eh :
Ter Out 12 00:00:00 BRT 2060   -  o nr do registro eh:  9

A data de ferFix agora eh :
Ter Nov 02 01:00:00 BRST 2060   -  o nr do registro eh:  10

A data de ferFix agora eh :
Sßb Dez 25 00:00:00 BRST 2060   -  o nr do registro eh:  11

A data de ferFix agora eh :
Qui Jan 01 00:00:00 BRST 2060   -  o nr do registro eh:  12

A data de ferFix agora eh :
Qua Abr 21 00:00:00 BRT 2060   -  o nr do registro eh:  13

A data de ferFix agora eh :
Ter Set 07 00:00:00 BRT 2060   -  o nr do registro eh:  14

A data de ferFix agora eh :
Ter Out 12 00:00:00 BRT 2060   -  o nr do registro eh:  15

A data de ferFix agora eh :
Ter Nov 02 01:00:00 BRST 2060   -  o nr do registro eh:  16

A data de ferFix agora eh :
Seg Nov 15 00:00:00 BRST 2060   -  o nr do registro eh:  17

A data de ferFix agora eh :
Qua Abr 21 00:00:00 BRT 2060   -  o nr do registro eh:  18
Criado 9 de fevereiro de 2012
Respostas 0
Participantes 1