[RESOLVIDO]Calcular diferença entre datas levando em conta horário de verão

3 respostas
satangoss

Olá Pessoal boa tarde, estou implementando um método que traz a diferença em dias de duas datas, o problema é que quando entre essas datas existe o horário de verão um dia é descontado.
Tentei implementar mas sem sucesso, segue abaixo o código que utilizo:

private static List<Date> getDatasIntervalo(Date dataInicial,
            Date dataFinal, List<Date> lista)
        throws Exception {

        if (dataInicial != null && dataFinal != null) {


            Calendar dtIni = toCalendar(dataInicial); 
            Calendar dtFim = toCalendar(dataFinal);

            if (dataFinal.after(dataInicial)) {
                
                while (dtIni.compareTo(dtFim) <= 0) {
                    lista.add(dtIni.getTime());
                    dtIni.add(Calendar.DATE, 1);
                }

            } else {
                throw new Exception(
                        "Os períodos devem ser informados em ordem crescente. Favor rever os períodos.");
            }
        }
        return lista;
    }


private static Calendar toCalendar(Date data) {

        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
        cal.setTime(round(data));

        return cal;
    }

    private static Date round(Date data) {
        try {
            DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
            return df.parse(df.format(data));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

As datas que utilizei para fazer a diferença foram:

03/09/2013 - 07/09/2013 => 5 dias certo
14/10/2013 - 23/10/2013 => 9 dias errado (o certo seriam 10 dias)

Desde já agradeço.

3 Respostas

fabiocortolan

Dá uma olhada se o JODA-TIME (joda-time.sourceforge.net/‎) consegue resolver seu problema, eu nunca utilizei essa API então não sei dizer se vai te atender, mas o pessoal fala muito dela aki no fórum.

thiagoteixeiraoficia

Conforme já mencionou o fabiocortolan utilize o JODA-TIME, veja abaixo como obter o intervalo entre duas datas:

Days.daysBetween(new DateTime(dataStart), new DateTime(DataEnd)).getDays()

Este método vai te renornar o intervalo entre as duas datas informadas.

Espero que ajude :slight_smile:

satangoss

vlw pessoal pelas respostas, na verdade descobri uma forma mais facil de fazer isso ignorando o horário de verão setando o TimeZone direto dentro do DateFormat assim :

private static Date round(Date data) {  
        try {  
            DateFormat df = new SimpleDateFormat("dd/MM/yyyy");  

             //Resolve problema de datas dentro de horário de verão 
            df.setTimeZone(TimeZone.getTimeZone("UTC"));
            return df.parse(df.format(data));  
        } catch (ParseException e) {  
            throw new RuntimeException(e);  
        }  
    }

Em todo caso muito obrigado pelas respostas.

Criado 2 de julho de 2013
Ultima resposta 3 de jul. de 2013
Respostas 3
Participantes 3