Problema com Calendar

4 respostas
Luiz_Henrique_Coura

estou precisando fazer com que uma data vá de uma à outra de 6h em 6h.

ex: 2004-08-10 12:00:00 ir até 2004-08-20 12:00:00

fiz um método que faz isso pra mim.

método…

private void setDate( String min, String max ) {
        
        DecimalFormat df = new DecimalFormat( "00" ); 
            
        int hora = Integer.parseInt( min.substring( 11, 13 ) );
        int dia = Integer.parseInt( min.substring( 8, 10 ) );
        int mes = Integer.parseInt( min.substring( 5, 7 ) );
        int ano = Integer.parseInt( min.substring( 0, 4 ) );
        
        Calendar calendar = Calendar.getInstance();
        
        calendar.set( ano, mes, dia, hora, 0, 0 );

        ////cria data no formato aaaa-mm-dd hh:mm:ss
        String dataObservadaBD = calendar.get( calendar.YEAR ) + "-" + df.format( calendar.get( calendar.MONTH ) ) + "-" + df.format( calendar.get( calendar.DATE ) ) + " " + df.format( calendar.get( calendar.HOUR_OF_DAY ) ) + ":00:00";
        
        while( dataObservadaBD.compareTo( max ) <= 0  ) {
            
            System.out.println( dataObservadaBD + " <= " + max );
            
            calendar.add( calendar.HOUR_OF_DAY, 6 );
            
            ////cria data no formato aaaa-mm-dd hh:mm:ss
            dataObservadaBD = calendar.get( calendar.YEAR ) + "-" + df.format( calendar.get( calendar.MONTH ) ) + "-" + df.format( calendar.get( calendar.DATE ) ) + " " + df.format( calendar.get( calendar.HOUR_OF_DAY ) ) + ":00:00";
                
        }
        
    }

a saída desse código para entrada:
min -> 2004-09-09 00:00:00
max ->2004-09-16 00:00:00

2004-09-09 00:00:00 <= 2004-09-16 00:00:00
2004-09-09 06:00:00 <= 2004-09-16 00:00:00
2004-09-09 12:00:00 <= 2004-09-16 00:00:00
2004-09-09 18:00:00 <= 2004-09-16 00:00:00
2004-09-10 01:00:00 <= 2004-09-16 00:00:00
2004-09-10 07:00:00 <= 2004-09-16 00:00:00
2004-09-10 13:00:00 <= 2004-09-16 00:00:00
2004-09-10 19:00:00 <= 2004-09-16 00:00:00
2004-09-11 01:00:00 <= 2004-09-16 00:00:00
2004-09-11 07:00:00 <= 2004-09-16 00:00:00
2004-09-11 13:00:00 <= 2004-09-16 00:00:00
2004-09-11 19:00:00 <= 2004-09-16 00:00:00
2004-09-12 01:00:00 <= 2004-09-16 00:00:00
2004-09-12 07:00:00 <= 2004-09-16 00:00:00
2004-09-12 13:00:00 <= 2004-09-16 00:00:00
2004-09-12 19:00:00 <= 2004-09-16 00:00:00
2004-09-13 01:00:00 <= 2004-09-16 00:00:00
2004-09-13 07:00:00 <= 2004-09-16 00:00:00
2004-09-13 13:00:00 <= 2004-09-16 00:00:00
2004-09-13 19:00:00 <= 2004-09-16 00:00:00
2004-09-14 01:00:00 <= 2004-09-16 00:00:00
2004-09-14 07:00:00 <= 2004-09-16 00:00:00
2004-09-14 13:00:00 <= 2004-09-16 00:00:00
2004-09-14 19:00:00 <= 2004-09-16 00:00:00
2004-09-15 01:00:00 <= 2004-09-16 00:00:00
2004-09-15 07:00:00 <= 2004-09-16 00:00:00
2004-09-15 13:00:00 <= 2004-09-16 00:00:00
2004-09-15 19:00:00 <= 2004-09-16 00:00:00

repare que da linha 4 para a linha 5 ele somou 7h ao inves de 6h.
não entendi e até agora não consegui encontrar o erro.

em nenhum momento eu acrecento 7h, somente 6h:

calendar.add( calendar.HOUR_OF_DAY, 6 );

alguém sabe me explicar porque isso acontece e se tem uma solução?

valews!!

4 Respostas

aborges

Ele nao acrescentou 7…

O problema eh q 18 + 6 = 24 e ele soh vai ateh 23… Entao ele pega a sobra (24-23) e coloca no proximo dia!

aborges

Soh completando… Qd a hora for 24, vc deve incrementar o dia e setar a hora=0

Luiz_Henrique_Coura

eh isso mesmo!!

valew!

T

Quando vi seu código achei que dava para simplesmente somar 3600 * 6 segundos à data inicial para ter o intervalo correto de 6 em 6 horas, mas obviamente esqueci que o horário de verão começa em algum fim de semana de outubro (depende da sua versão do Windows ou do Solaris ou do Java…)

Criado 16 de setembro de 2004
Ultima resposta 16 de set. de 2004
Respostas 4
Participantes 3