Comecei hoje a usar o JODA-TIME 1.5 para calcular o tempo que durou um determinado evento entre duas datas e o código é o seguinte:
public class TesteData {
public static void main(String[] args) {
DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
DateTime end = new DateTime(2005, 1, 1, 0, 0, 0, 0);
// duration in ms between two instants
Duration dur = new Duration(start, end);
System.out.println(dur.getMillis());
Date data = new Date(dur.getMillis());
String d = new SimpleDateFormat("d hh:mm:ss").format(data);
System.out.println(d);
}
}
Ele calcula o tempo em dias certo (7 dias) porém as horas deveriam vir como 0, afinal foram 7 dias exatos, mas ele ta imprimindo as horas como 09:00:00.
Não misture Joda Time com SimpleDateFormat. No seu caso você precisa converter seu Duration em um Period, e usar a classe PeriodFormat e PeriodFormatter.
import org.joda.time.*;
import org.joda.time.format.*;
class TesteJodaTime {
public static void main(String[] args) {
DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
DateTime end = new DateTime(2005, 1, 1, 0, 0, 0, 0);
Period per = new Period (start, end);
// Isto imprime "1 week"
System.out.println (PeriodFormat.getDefault().print (per));
// Isto imprime "1 semana, 0 dias, 00:00:00"
PeriodFormatter pf = new PeriodFormatterBuilder()
.printZeroAlways()
.appendWeeks()
.appendSuffix (" semana, ", "semanas, ")
.appendDays()
.appendSuffix (" dia, ", " dias, ")
.minimumPrintedDigits(2)
.appendHours()
.appendSeparator(":")
.appendMinutes()
.appendSeparator(":")
.appendSeconds()
.toFormatter();
System.out.println (pf.print (per));
}
}