Joda-Time X Calendar

Pessoal alguém pode me explicar porque existe diferença entre os resultados abaixo?

public class Joda {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DateTime d1 = new DateTime().plusDays(1);  
        DateTime d2 = new DateTime();
        
        System.out.println(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(d1.toDate()));
        System.out.println(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(d2.toDate()));
        long milisecs = (d1.toDate().getTime() - d2.toDate().getTime());
        long segundos = milisecs /1000;
        long minutos = segundos / 60;
        long horas = minutos / 60;
        long dias = horas / 24;
        
        System.out.println( "segundos: " +  segundos );
        System.out.println( "minutos: " +  minutos );
        System.out.println( "horas: " +  horas );
        System.out.println( "dias: " +  dias );

		comCalendar();
	}
	
	private static void comCalendar() {
        Calendar data1 = Calendar.getInstance();
		data1.add(Calendar.DAY_OF_WEEK, 1);
		
		Calendar data2 = Calendar.getInstance();
		
		DateTime d1 = new DateTime(data1.getTimeInMillis());  
		DateTime d2 = new DateTime(data2.getTimeInMillis());
		
		System.out.println(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(d1.toDate()));
		System.out.println(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(d2.toDate()));
		long milisecs = (d1.toDate().getTime() - d2.toDate().getTime());
		long segundos = milisecs /1000;
		long minutos = segundos / 60;
		long horas = minutos / 60;
		long dias = horas / 24;
		
		System.out.println( "segundos: " +  segundos );
		System.out.println( "minutos: " +  minutos );
		System.out.println( "horas: " +  horas );
		System.out.println( "dias: " +  dias );
	}

}

Resultado:
17/07/2010 13:43:21
16/07/2010 13:43:21
segundos: 86399
minutos: 1439
horas: 23
dias: 0

17/07/2010 13:43:21
16/07/2010 13:43:21
segundos: 86400
minutos: 1440
horas: 24
dias: 1

Deve ser o modo de contagem de cada api uma começando do 0 e a outra do 1!
Mas não sei ao certo!

Calendar.DAY_OF_WEEK. Não deveria ser DAY_OF_MONTH?

A impressão que tenho é que no Joda você tem um segundo a menos, que é onde no calendar você pode ter 23:59.999 ao invés de 24:00.000

Ixi…
digitei errado ali, na verdade queria dizer Calendar.DAY_OF_MONTH, mas o resultado nesse exemplo da no mesmo né.
Mas que é estranho isso é!

acredito que o tempo na linha 8 seja algum milesimos de segundos apos a linha 7…

tente isso

DateTime d1 = new DateTime();
DateTime d2 = d1.plusDays(1);

e de um feedback, legal sua questao

abrasssssss

Foi exatamente o que pensei quando ví a questão. Afinal, 23:59.999 não é a mesma coisa que 24:00.000

[quote=renanreismartins]acredito que o tempo na linha 8 seja algum milesimos de segundos apos a linha 7…

tente isso

DateTime d1 = new DateTime();
DateTime d2 = d1.plusDays(1);

e de um feedback, legal sua questao

abrasssssss[/quote]

Que legal, isso é mais uma prova do mau hábito de se usar programação “copy & paste”, e mais uma prova de o pessoal achar que o tempo para executar uma linha de programa é exatamente zero.
Não é porque uma coisa é escrita do mesmo jeito que ela vai dar o mesmo resultado.

         DateTime d1 = new DateTime().plusDays(1);    
         DateTime d2 = new DateTime();

Para não usar copy & paste, obviamente teríamos:

         DateTime now = new DateTime();
         DateTime d1 = now.plusDays(1);    
         DateTime d2 = now;