Calendar.add

Boa dia a todos,

Estou com a seguinte situação: busco uma data específica a partir de outra inicial. Para isso, tenho um loop que decrementa a data inicial de 1 em 1 dia.

Com isso:

LOOP: c.add(Calendar.DATE, -1);

Onde c é um Calendar.

Quando a data é, por exemplo, ‘01/01/2014’, após c.add(Calendar.DATE, -1), ela fica ‘31/01/2014’ mas eu preciso que “volte” o ano, ou seja, fique ‘31/01/2013’. Alguém poderia me ajudar?

Calendar.DATE e Calendar.DAY_OF_MONTH são iguais, por isso ele volta para o inicio do mês.
Altera para Calendar.DAY_OF_YEAR que ele voltará o ano caso seja o primeiro dia…

import java.util.Calendar;


public class Principal {

	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		c.set(2014, 0, 1);
		System.out.println(c.getTime());
		c.add(Calendar.DAY_OF_YEAR, -1);
		System.out.println(c.getTime());



	}

}