Restar días a una fecha

David
14 de Febrero del 2006
Buenos días.
Necesito saber si hay alguna forma de restar días a una fecha con un formato String = "dd/mm/yyyy" y que funcione, sobre todo, cuando tiene que cambiar el mes. Es decir, yo le paso una fecha cualquiera en ese formato, le resto 3 días y me pone la fecha con 3 días menos.
Tengo la siguiente función para sumar:
public static Date FechaMasDias(Date dFecha,int Dias){
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(dFecha);
calendar.add(Calendar.DATE,Dias);
return calendar.getTime();
}
Funciona bien siempre. Si pongo 25 y le sumo 3, pone 28, y si pongo 30 y le sumo 3, pone 2 o 3, dependiendo de si el mes es de 30 o 31 días. Pero si en el argumento int dias le pongo un número negativo, solo me hace bien la resta cuando no hay cambio de mes. Es decir, si pongo 25 y le resto 3, me pone 22, pero si pongo 2 (de marzo, por ejemplo) y le resto 3, me pone 30/03/2005. Es igual si pongo 2 de abril, se va 11 meses atrás.
¿Alguien sabe cómo puedo arreglar esto?
Muchas gracias.

David
14 de Febrero del 2006
Me respondo a mí mismo, al menos esto me funciona:

public static String FechaMenosDias(int iAnio, int iMes, int iDia, int Dias) throws Exception{
Calendar calendario = Calendar.getInstance();
calendario.set(iAnio, iMes, iDia);
calendario.add(Calendar.DATE,-Dias);
String fechaFinal = ClassLib.dateTostr(calendario.getTime(),\\\\\\\"dd/MM/yyyy\\\\\\\");
return fechaFinal;
}

Algunos métodos son propios, pero creo que la lógica se entiende :)