Calendar - ¿31 de Junio?

Langas
06 de Junio del 2008
Buenas a todos. he hecho un programita tonto en un rato de aburrimiento para saber el día que cumpliré x días y me encontrado algo muy, pero que muy inesperado. Obtengo una fecha de ¡31 de Junio! Día que, como es obvio, no existe, pero la clase Calendar parece pensar que sí.

Aquí os dejo la parte relevante del código:

long numerodemilisegundosenundia = 24*60*60*1000;

Calendar c = Calendar.getInstance();
c.set(2008,6,6);
Date d1 = c.getTime();
c.set(1981,4,6);
Date d2 = c.getTime();
Date d3 = new Date(d2.getTime() + numerodemilisegundosenundia*9948);


long dif2 = (d3.getTime() - d1.getTime())/numerodemilisegundosenundia;
System.out.println("días que faltan hasta que cumplas 9948: " + dif2);

c.setTime(d3);
int ano = c.get(Calendar.YEAR);
int mes = c.get(Calendar.MONTH);
int dia = c.get(Calendar.DAY_OF_MONTH);
System.out.println("cumplirás 9948 el: " + dia + "/" + mes + "/" + ano);

Aparte de esto, Calendar está convencido de que hoy, día 6/6/2008, es domingo (cuando es jueves) ¿Alguien sabe de dónde provienen estos errores?

Langas
06 de Junio del 2008
Solucionado, no me di cuenta de que Calendar empieza a contar los meses desde 0, es decir, que junio es el mes 5.

Un saludo.