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

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.

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.

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:

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 :

[code] 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);  
    }  
}  [/code]

Em todo caso muito obrigado pelas respostas.