Fazendo um loop de datas, de um determinado periodo! Como fazer? [Resolvido]

9 respostas
Pilantra

Olá,

Eu preciso fazer um loop de datas de um determinado periodo, por exemplo, O usuário escolhe um periodo de 01/01/2007 a 15/02/2007!!!

Como eu poderia fazer isso? Eu preciso fazer isso para uma tela de correção de ponto, e precisa listar o periodo inteiro mesmo que não tenha registro no banco, se não tiver registro no banco, é porque ele faltou por isso precisa ser listado todos hehehe!!

Alguém me ajuda?

Obrigado desde já.

Abraços.

9 Respostas

cassio

http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#add(int,%20int)

Pilantra

???

Pilantra

Hum, acho que entendi. Vou tentar fazer um esquema aqui. Mas se alguém tiver mais idéias por favor me fale.

Obrigado.

cassio

Faz um laço, adicionando de um em um dia, da data inicial até a final. A cada dia adicionado, você verifica se o resultado ainda é uma data anterior à que você definiu como final do intervalo. Não tenho certeza, mas acho que esse método acaba cuidando das viradas de ano, meses com 28 / 30 / 31 dias, etc.

Pilantra

Valeu cara!!!

Pilantra

Vejam o esquema que eu fiz:

int intervalo = 0;
int i = 0;

Calendar periodo1 = Calendar.getInstance();
periodo1.set(2007,0,1); 

Calendar periodo2 = Calendar.getInstance();
periodo2.set(2007,1,15); 

intervalo = (periodo2.get(periodo2.DAY_OF_YEAR) - periodo1.get(periodo1.DAY_OF_YEAR)) + 1;
    
    for (;i<intervalo;i++) {
        periodo1.add(periodo1.DATE,i);
        
        System.out.println(i + " - " + periodo1.get(periodo1.DATE) 
        + "/" + (periodo1.get(periodo1.MONTH) + 1) + "/" + periodo1.get(periodo1.YEAR));
    }

Ele me retorna isso:

0 - 1/1/2007
1 - 2/1/2007
2 - 4/1/2007
3 - 7/1/2007
4 - 11/1/2007
5 - 16/1/2007
6 - 22/1/2007
7 - 29/1/2007
8 - 6/2/2007
9 - 15/2/2007
10 - 25/2/2007
11 - 8/3/2007
12 - 20/3/2007
13 - 2/4/2007
14 - 16/4/2007
15 - 1/5/2007
16 - 17/5/2007
17 - 3/6/2007
18 - 21/6/2007
19 - 10/7/2007
20 - 30/7/2007
21 - 20/8/2007
22 - 11/9/2007
23 - 4/10/2007
24 - 28/10/2007
25 - 22/11/2007
26 - 18/12/2007
27 - 14/1/2008
28 - 11/2/2008
29 - 11/3/2008
30 - 10/4/2008
31 - 11/5/2008
32 - 12/6/2008
33 - 15/7/2008
34 - 18/8/2008
35 - 22/9/2008
36 - 28/10/2008
37 - 4/12/2008
38 - 11/1/2009
39 - 19/2/2009
40 - 31/3/2009
41 - 11/5/2009
42 - 22/6/2009
43 - 4/8/2009
44 - 17/9/2009
45 - 1/11/2009

Se eu não usar o loop, ele funciona perfeitamente, eu vou setando a variavel i manualmente e ele calcula certinho. Mas dentro do loop fica todo bagunçado assim. Alguém sabe me dizer porque? =\

Pilantra

heheheheh que erro!!! Valeu cara, deu certo agora!!!

Abraços.

R

No link que o cassio passou, vc encontra os métodos necessários para manipulação de datas…

Na api do Calendar, tem o ‘DAY_OF_YEAR’, vc pode utilizá-lo para identificar os dias no ano e ir de um até o outro por um laço (for, while, do…while,…). Se for utilizar o DAY_OF_YEAR, cuidado com a virada de ano.

flw!

R

O problema está na soma do “i” a sua data.
Assim, vc está somando 1 no dia 01/01, depois está somando 2 no dia 02/01, depois está somando 3 no dia 04/01…

Altere seu código para somar 1 em vez de “i” no for…

for (;i<intervalo;i++) { periodo1.add(periodo1.DATE,1); System.out.println(i + " - " + periodo1.get(periodo1.DATE) + "/" + (periodo1.get(periodo1.MONTH) + 1) + "/" + periodo1.get(periodo1.YEAR) + "<br>"); }

Criado 20 de setembro de 2007
Ultima resposta 20 de set. de 2007
Respostas 9
Participantes 3