Cálculo de data, de acordo com valor informado

Boa tarde pessoal.

Estou desenvolvendo um serviço no qual preciso calcular a data inicial, de acordo com a data final que é sempre a data atual. No serviço deve ser informado um valor de diferença entre a data inicial e final, e com base nesse valor preciso calcular a data inicial. Por exemplo, informando o valor 15, a data inicial deve ser 02/06/2009, pois a data final é 18/06/2009 (data atual).
Gostaria de saber se naquela classe GregorianCalendar existe algum método que ajude a fazer esse tipo de cálculo, pois eu analisei e não encontrei. Eu pensei em desenvolver uma classe para esse tipo de situação, mas como envolveria bastante verificações (ano bissesto, dias dos meses, etc), pensei em perguntar pra vocês qual seria a melhor maneira de eu desenvolver este algoritmo.

Aguardo uma resposta.

Muito Obrigado! :slight_smile:

tenta isso

        GregorianCalendar calendarFinal = new GregorianCalendar();
        calendarFinal.add(Calendar.DAY_OF_MONTH, 15);

segue um exemplo[code]
sumDays(date, -15)

public static Date sumDays(Date date, int days) {
	GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
	gc.setTime(date);
	gc.add(GregorianCalendar.DAY_OF_MONTH, days);
	return gc.getTime();
}[/code]

Legal, ajudou pra caramba!

Valeu!

Mais uma dúvida, não sei porque, mas na hora de eu recuperar o valor do mês inserido, ele retorna o mês errado. Por exemplo: quando eu tenho mês 06 ele retorna como mês 07, na hora em que recupero o valor.
Segue abaixo o código:

[code]
GregorianCalendar dt = (GregorianCalendar) GregorianCalendar.getInstance();

m_DataFinal = new SimpleDateFormat(“ddMMyyyy”).format(now.getTime());
m_csDiaFinal = m_DataFinal.substring(0,2);
m_csMesFinal = m_DataFinal.substring(2,4);
m_csAnoFinal = m_DataFinal.substring(4,8);

dt.set(Integer.parseInt(m_csAnoFinal), Integer.parseInt(m_csMesFinal), Integer.parseInt(m_csDiaFinal));
dt.add(GregorianCalendar.DAY_OF_MONTH, -Integer.parseInt(m_sNumLanc));
m_DataInicial = new SimpleDateFormat(“ddMMyyyy”).format(dt.getTime());[/code]

Alguém sabe o porque disso?

Obrigado.

Os meses começam do zero

Exemplo:

public final static int JANUARY = 0;

Abraços!

Nesse caso, a melhor solução seria subtrair 1 do valor retornado do mês mesmo? Ou existe alguma outra solução mais formal pra isso? hehehe

Obrigado.