Restar dos fechas GREGORIAN CALENDAR

El primer caso de restar dos fechas del tipo Gregorian Calendar, se presenta cuando ambas fechas implicadas pertenecen al mismo año. De esta manera la resta seria correcta en todo sentido.



GregorianCalendar t1 = new GregorianCalendar(2011,6,13);
GregorianCalendar t2 = new GregorianCalendar(2011,6,19);
// Restamos
int dias = t2.get(Calendar.DAY_OF_YEAR) - t1.get(Calendar.DAY_OF_YEAR);
//la respuesta sera de 6 dias

El problema se presenta cuando deseamos que esta resta se realice para fechas de diferente año para la cual presentamos una forma general que incluye el metodo anterior. Un punto importante aqui es identificar si los años tomado son bisiestos.


GregorianCalendar date1 = new GregorianCalendar(2009,11,25);
GregorianCalendar date2 = new GregorianCalendar(2010,0,2);
// verificamos si estamos en el mismo año
if (date1.get(Calendar.YEAR) == date2.get(Calendar.YEAR)) {
System.out.println( "Valor de Resta simple: " +String.valueOf(date2.get(Calendar.DAY_OF_YEAR) - date1.get(Calendar.DAY_OF_YEAR))); } else { // Si los años son distintos verificar que el año de inicio no sea bisiesto, ya que de serlo serian 366 dias el año, en caso contratio 365

int diasAnyo = date1.isLeapYear(date1.get(Calendar.YEAR)) ? 366 : 365;

// Calculando el rango de los años
int rangoAnyos = date2.get(Calendar.YEAR) - date1.get(Calendar.YEAR);

// Calculando rango de los dias que hay
int rango = (rangoAnyos * diasAnyo) + (date2.get(Calendar.DAY_OF_YEAR) - date1.get(Calendar.DAY_OF_YEAR));
}
System.out.println("Valor de rangoDias:" + (date2.get(Calendar.DAY_OF_YEAR) - date1.get(Calendar.DAY_OF_YEAR))); System.out.println("Valor de rangoAnyos: " + nAnyos); System.out.println("Valor de rango: " + rango);