Calendar.add

public void execute() throws Exception{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse("2012-03-31");

System.out.println(date);

Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -1);

System.out.println(new Date(cal.getTimeInMillis()));
}


Sat Mar 31 00:00:00 JST 2012
Wed Feb 29 00:00:00 JST 2012

3/31 - 1月 = 2/31 = 3/2
とせず、
3/31 - 1月 = 2/31 ―(あふれてるよ!)→ 2/29
としてくれるみたいですね